相信自己,只有不想做的,没有做不到的。
分类: LINUX
2013-12-16 21:44:50
一 无名管道
特点:
1.只能用于亲缘关系间进程通信
2.半双工,有固定的读端(fd[0])和写端(fd[1])
3.管道中的数据,读走之后就不存在于管道中
int pipe(int pipefd[2]);
功能:创建无名管道,获得两个文件描述符(fd[0],fd[1])
返回值:成功返回0,失败返回-1
两个进程间用无名管道实现通信
#include
#include
#include
#include
int read_pipe(int fd)
{
int n;
char buf[1024];
while(1)
{
n = read(fd,buf,sizeof(buf) - 1);
buf[n] = '\0';
printf("Read %d bytes: %s.\n",n,buf);
if(strncmp(buf,"quit",4) == 0)
break;
}
return 0;
}
int write_pipe(int fd)
{
/*
char buf[] = "hello word";
sizeof(buf) : 11
strlen(buf) : 10
*/
char buf[1024];
while(1)
{
printf(">");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf) - 1] = '\0';
write(fd,buf,strlen(buf));
}
}
int main(int argc, const char *argv[])
{
pid_t pid;
int fd[2];
if(pipe(fd) < 0)
{
perror("Fail to pipe");
exit(EXIT_FAILURE);
}
if((pid = fork()) < 0)
{
perror("fail to fork");
exit(EXIT_FAILURE);
}
if(pid == 0)
{
close(fd[1]);
read_pipe(fd[0]);
}
if(pid > 0)
{
close(fd[0]);
write_pipe(fd[1]);
}
exit(EXIT_SUCCESS);
}