mkfifo_w.cpp
/*
* function: 演示使用mkfifo创建管道,并实现无血缘关系的进程间通信
* 此进程为写端
*
* 2020-12-05
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int ret = mkfifo("mytestfifo", 0644); // 创建管道
if (ret < 0)
{
perror("mkfifo faild");
exit(1);
}
printf("创建管道完成\n");
int fd = open("mytestfifo", O_WRONLY); // 以只写权限打开管道
if (fd < 0)
{
perror("open faild");
exit(1);
}
char buf[] = "hello world";
write(fd, buf, sizeof(buf)); // 向管道写入buf
printf("写管道完成\n");
return 0;
}
mkfifo_r.cpp
/*
* function: 演示使用mkfifo创建管道,并实现无血缘关系的进程间通信
* 此进程为读端
*
* 2020-12-05
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
// 在写端已经创建管道
sleep(2);
int fd = open("mytestfifo", O_RDONLY); // 以只读权限打开管道
if (fd < 0)
{
perror("open faild");
exit(1);
}
char buf[256] = {0};
int n = read(fd, buf, sizeof(buf));
if (n < 0)
{
perror("read faild");
exit(1);
}
printf("%s\n", buf);
return 0;
}