管道(半双工进程通信)
#include <stdio.h>
#include <string.h>
void read_to_pipe(int fd){
int readsize;
char message[100];
readsize=read(fd, message, 100);
printf("read from pipe :%s size:%d\n", message,readsize);
}
void write_to_pipe(int fd){
int writesize;
char message[1000];
printf("Input your message!\n");
scanf("%s", message);
writesize=write(fd, message, strlen(message));
printf("write to pipe size:%d\n",writesize);
}
int main(){
int fd[2];
int pid;
pipe(fd);
while((pid=fork())==-1);
if(pid == 0)
{
close(fd[1]);
read_to_pipe(fd[0]);
close(fd[0]);
}
else
{
close(fd[0]);
write_to_pipe(fd[1]);
close(fd[1]);
}
return 0;
}
注意
- 父写子读的单向通信,所以叫半双工
- 不需要sleep控制是因为子进程继承了文件描述符,且read函数无可读数据会阻塞,如果用兄弟进程实现效果应该会更加明显