有名管道特点
1.对应管道文件,可用于任意进程间进行通讯
2.打开管道时可指定读写方式
3.通过文件IO操作,内容存放在内存中
有名管道创建–mkfifo
#include <unistd.h>
#include <fcntl.h>
int mkfifo(const char* path, mode_t mode);
1.成功时返回0,失败时返回EOF
2.path创建的管道文件路径,之后可对文件进行读写
3.mode管道文件的权限,如0666
代码示例
写程序
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
int re;
int fd;
char buf[32];
unlink("/myfifo");
re = mkfifo("/myfifo", 0666);
if (re == -1)
{
perror("mkfifo");
return -1;
}
fd = open("/myfifo", O_WRONLY|O_CREAT|O_TRUNC);
if (fd < 0)
{
perror("open");
return -1;
}
strcpy(buf, "fifo write test");
while (1)
{
write(fd, buf, strlen(buf));
sleep(1);
}
return 0;
}
读程序
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
int re;
int fd;
char buf[32];
fd = open("/myfifo", O_RDONLY);
if (fd < 0)
{
perror("open");
return -1;
}
while (1)
{
read(fd, buf, 32);
printf("%d\n", strlen(buf));
printf("%s\n", buf);
memset(buf, 0, 32);
sleep(1);
}
return 0;
}