#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
int main()
{
int fd[2] = {0};//fd[0]读;fd[1]写
int ret = pipe(fd);
if(-1 == ret)
{
perror("pipe");
exit(1);
}
pid_t pid = fork();
if(-1 == pid)
{
perror("fork");
exit(2);
}
if(0 == pid)
{
//c;read
//close(fd[1]);
char buffer[32];
while(1)
{
if(-1 == read(fd[0], buffer,32))
{
perror("read");
exit(3);
}
printf("C :receive: %s\n", buffer);
if(-1 == write(fd[1], buffer, strlen(buffer)))
{
perror("write");
exit(4);
}
if(strcmp(buffer, "exit") == 0)
{
close(fd[0]);
exit(0);
}
sleep(1);
memset(buffer, 0, 32);
}
}
else
{
//p:write
//close(fd[0]);
char buffer[32] = {0};
while(1)
{
scanf("%s",buffer);
if(-1 == write(fd[1], buffer, strlen(buffer)))
{
perror("write");
exit(4);
}
sleep(1);
if(-1 == read(fd[0], buffer,32))
{
perror("read");
exit(3);
}
printf("P :receive: %s\n",buffer);
if(strcmp(buffer, "exit") ==0)
{
close(fd[1]);
exit(0);
}
memset(buffer, 0, 32);
}
}
}
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
int main()
{
int fd[2] = {0};//fd[0]读;fd[1]写
int ret = pipe(fd);
if(-1 == ret)
{
perror("pipe");
exit(1);
}
pid_t pid = fork();
if(-1 == pid)
{
perror("fork");
exit(2);
}
if(0 == pid)
{
//c;read
//close(fd[1]);
char buffer[32];
while(1)
{
if(-1 == read(fd[0], buffer,32))
{
perror("read");
exit(3);
}
printf("C :receive: %s\n", buffer);
if(-1 == write(fd[1], buffer, strlen(buffer)))
{
perror("write");
exit(4);
}
if(strcmp(buffer, "exit") == 0)
{
close(fd[0]);
exit(0);
}
sleep(1);
memset(buffer, 0, 32);
}
}
else
{
//p:write
//close(fd[0]);
char buffer[32] = {0};
while(1)
{
scanf("%s",buffer);
if(-1 == write(fd[1], buffer, strlen(buffer)))
{
perror("write");
exit(4);
}
sleep(1);
if(-1 == read(fd[0], buffer,32))
{
perror("read");
exit(3);
}
printf("P :receive: %s\n",buffer);
if(strcmp(buffer, "exit") ==0)
{
close(fd[1]);
exit(0);
}
memset(buffer, 0, 32);
}
}
}
本文介绍了一个使用C语言实现的父子进程间通过管道进行双向通信的例子。详细展示了如何创建管道、如何在父进程与子进程中分别进行写入和读取操作,并通过循环实现了连续的数据交换,直至接收到退出信号。
621

被折叠的 条评论
为什么被折叠?



