Linux 进程间管道双向通讯实例,一下为源代码:
#define INPUT 0
#define OUTPUT 1
void main() {
int file_descriptors[2],pipe_com2[2];
int spawned_process_pid;
char buf[256]={0};
int returned_count,i;
pipe(file_descriptors);
pipe(pipe_com2);
if((spawned_process_pid = fork()) == -1) {
printf("Error in fork\n");
exit(1);
}
if(spawned_process_pid == 0) {
for(i=0;i<20;i++){
printf("in the spawned (child) process...\n");
// The spawned (child) process will write data back to
// the spawning (parent) process. The spawned process
// does not need the input file descriptor, so we close it:
close(file_descriptors[INPUT]);
close(pipe_com2[OUTPUT]);
write(file_descriptors[OUTPUT], "test data child", strlen("test data child"));
returned_count = read(pipe_com2[INPUT],buf,sizeof(buf));
printf("%d bytes of data received from spawned process: %s\n",
returned_count, buf);
usleep(20);
}
exit(0);
} else {
for(i=0;i<20;i++){
printf("in the spawning (parent) process...\n");
// The spawning (parent) process will just read data
// (that is sent from the spawned process) from the pipe,
// so we can close the input file descriptor:
close(file_descriptors[OUTPUT]);
close(pipe_com2[INPUT]);
// wait for data sent by the spawned (child) process:
write(pipe_com2[OUTPUT], "test data father", strlen("test data father"));
returned_count = read(file_descriptors[INPUT],
buf,
sizeof(buf));
printf("%d bytes of data received from spawned process: %s\n",
returned_count, buf);
usleep(20);
}
}
}
阅读(925) | 评论(0) | 转发(0) |