一、linux 进程间通信机制中管道的缺点:
1、管道只能在父子进程间、兄弟进程间,即具有亲缘关系的进程间进行通信
2、管道提供的是无格式的字节流,因此两个进程要进行通信的话,要提前约定好通信的数据格式
3、管道有自己的缓存区,因此该缓存区有大小的限制
4、一条管道只能提供半双工的通信方式
二、管道的创建及使用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
void read_from_pipe(int fd)
{
char message[100];
read(fd, message, 100);
printf("read from pipe:%s", message);
}
void write_from_pipe(int fd)
{
char *message = "hello world\n";
write(fd, message, strlen(message) + 1);
}
int main(void)
{
int fd[2];
pid_t pid;
int child_exit_code;
if(pipe(fd) != 0)
{
perror("create pipe failed\n");
exit(1);
}
pid = fork();
switch(pid)
{
case -1:
printf("fork failed\n");
exit(1);
case 0:
//子进程
close(fd[1]);
read_from_pipe(fd[0]);
exit(0);
default:
//父进程
close(fd[0]);
write_from_pipe(fd[1]);
wait(&chile_exit_code);
exit(0);
}
return 0;
}