作业1:有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1
创建两个有名管道文件
#include <myhead.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./my_fifo",0664)== -1)
{
perror("mkfifo");
return -1;
}
if(mkfifo("./my_user",0664)== -1)
{
perror("mkfifo");
return -1;
}
return 0;
}
父线程发送信息,子线程接收信息
#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t id = fork();
if (id > 0)
{
int send;
send = open("./my_fifo", O_WRONLY);//已只写打开管道
if (-1 == send)
{
perror("open send");
return -1;
}
char buff[1024];
while (1)
{
int len = read(0, buff, sizeof(buff));
buff[strlen(buff) - 1] = '\0';
write(send, buff, len);//写入管道
if (strcmp(buff, "quit") == 0)
{
break;
}
}
close(send);
}
else if (id == 0)
{
int rev;
rev = open("./my_user", O_RDONLY);//已只读打开
if (-1 == rev)
{
perror("open rev");
return -1;
}
char buff[1024];
while (1)
{
//memset(buff,0,sizeof(buff));
int len = read(rev, buff, sizeof(buff));//从管道读取
if (strcmp(buff, "quit") == 0)
{
break;
}
write(1, buff, len);//写入标准输出
}
close(rev);
}
else
{
perror("fork");
return -1;
}
return 0;
}
在建一个代码和这个一样的文件,将发送接收的文件改一下就可以实现。