作业:有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.
有名管道创建 pipe1.c
#include<stdio.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./pipe1",0664)!=0)
{
perror("mkpipe1");
return -1;
}
if(mkfifo("./pipe2",0664)!=0)
{
perror("mkpipe2");
return -1;
}
return 0;
}
1.c
#include<stdio.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
pid_t pid1;
pid1=fork();
if(pid1>0)
{
while(1)
{
int fd;
char buff[1024];
fd=open("./pipe1",O_WRONLY);
int len=read(0,buff,sizeof(buff));
buff[len-1]='\0';
write(fd,buff,len);
if(strcmp(buff,"quite")==0)
{
break;
}
}
}
else if(pid1==0)
{
while(1)
{
int fd;
char buff[1024];
fd=open("./pipe2",O_RDONLY);
int len=read(fd,buff,sizeof(buff));
buff[len-1]='\0';
putchar(10);
if(strcmp(buff,"quite")==0)
{
break;
}
write(1,buff,len);
memset(buff,0,sizeof(buff));
}
printf("1.c文件子进程停止\n");
exit(EXIT_SUCCESS);
}
else
{
perror("pid1");
return -1;
}
printf("1.c文件父进程停止\n");
wait(NULL);
return 0;
}
2.c
#include<stdio.h>
#include<string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
pid_t pid1;
pid1=fork();
if(pid1>0)
{
while(1)
{
int fd;
char buff[1024];
fd=open("./pipe2",O_WRONLY);
int len=read(0,buff,sizeof(buff));
buff[len-1]='\0';
write(fd,buff,len);
if(strcmp(buff,"quite")==0)
{
break;
}
}
}
else if(pid1==0)
{
while(1)
{
int fd;
char buff[1024];
fd=open("./pipe1",O_RDONLY);
int len=read(fd,buff,sizeof(buff));
buff[len-1]='\0';
putchar(10);
if(strcmp(buff,"quite")==0)
{
break;
}
write(1,buff,len);
memset(buff,0,sizeof(buff));
}
printf("2.c文件子进程停止\n");
exit(EXIT_SUCCESS);
}
else
{
perror("pid1");
return -1;
}
printf("2.c文件父进程停止\n");
wait(NULL);
return 0;
}