有名管道
创建有名管道
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int ret = mkfifo("myfifo", 0664);//创建有名管道,管道名为myfifo可以改名,0664为8进制权限
if(ret < 0)
{
perror("mkfifo");
exit(-1);
}
return 0;
}
向管道传输数据
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
if(argc < 2)//从命令行接收的命令小于2个
{
printf("Usage: %s <fifo_name>\n", argv[0]);
exit(-1);
}
int fd = open(argv[1], O_WRONLY);//open打开文件 返回文件描述符,详细见后面
if(fd < 0)
{
perror("open");
exit(-1);
}
printf("open ok!\n");
char buf[64] = {0};
while(1)
{
fgets(buf, 64, stdin);//stdin标准输入(键盘),输入到buf
write(fd, buf, 64);//将buf的数据写入fd
}
return 0;
}
从管道接收数据
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
if(argc < 2)//从命令行接收的命令小于2个
{
printf("Usage: %s <fifo_name>\n", argv[0]);
exit(-1);
}
int fd = open(argv[1], O_RDONLY);//open打开文件 返回文件描述符,详细见后面
if(fd < 0)
{
perror("open");
exit(-1);
}
printf("open ok!\n");
char buf[64] = {0};
while(1)
{
read(fd, buf, 64);//将fd的内容给buf
printf("%s", buf);
}
return 0;
}