파이프를 이용하여 두 프로세스의 통신을 실현하다

2074 단어 운영 체제
코드는 다음과 같다.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main( )
{ 
	pid_t pid1,pid2;
	int pipe_fd[2];
	char w_buffer[100],r_buffer[100];	 
	int	len1,len2;
	/*      */
	if(pipe(pipe_fd)<0)
	{
		printf("pipe create error
"); return -1; } /* */ if((pid1=fork( ))==0) // 1 { close(pipe_fd[0]); // sprintf(w_buffer,"child 1 process is sending message!"); len1 = strlen(w_buffer); write(pipe_fd[1],w_buffer,len1); /* len */ exit(0); } else if(pid1>0) // { waitpid(pid1,NULL,0); // 1-- 1 if((pid2=fork( ))==0) // 2 { close(pipe_fd[0]); // sprintf(w_buffer,"child 2 process is sending message!"); len2 = strlen(w_buffer); write(pipe_fd[1],w_buffer,len2); exit(0); } else if(pid2>0) // { waitpid(pid2,NULL,0); // 2-- 2 close(pipe_fd[1]); // /* */ if(read(pipe_fd[0],r_buffer,sizeof(r_buffer))>0) // if(read(pipe_fd[0],r_buffer,len1)>0) printf("%s
",r_buffer); if(read(pipe_fd[0],r_buffer,sizeof(r_buffer))>0) printf("%s
",r_buffer); exit(0); } } return 0; } // waitpid , , 。 // fork , 。 // 。 // ,“ P1 , P2 。” // , ( )、 1 2 ( 1 , 2 )

문제: 출력 과정에서read 함수의 세 번째 인자를 50(write 함수의 세 번째 인자도 50으로 바꿀 때)으로 변경하면 정상적으로 실행할 수 있으며, ln1로 변경하면 하위 프로세스가 끝날 때 ln1이 차지하는 공간이 방출되어 값이 없습니다.
sizeof(r buffer)인 경우 정상적으로 작동할 수 있는 이유는 무엇입니까?만약sizeof 함수를 사용하지 않는다면 어떻게 수신자가 읽을 길이를 정확하게 식별할 수 있습니까?sizeof 함수를 사용할 때 테스트를 통해 sizeof(r buffer)의 값은 200인데 왜 세 번째 파라미터가 50이면 정상적으로 작동합니까?
해결됨: wbuffer 및 r버퍼는 모두 길이가 200인 문자 수조이기 때문에 수신할 때sizeof 함수를 사용하면 수용 내용을 정확하게 식별할 수 있다. 이것은 바로 세 번째 파라미터를 35로 설정하면 난코드가 발생하는 이유이다.

좋은 웹페이지 즐겨찾기