有名管道特點
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;
}