#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define MYFIFO "/tmp/myfifo" /* 有名管道文件名*/
#defineMAX_BUFFER_SIZE PIPE_BUF /*定义在于limits.h中*/
int main(intargc, char * argv[]) /*参数为即将写入的字符串*/
{
int fd;
char buff[MAX_BUFFER_SIZE];
int nwrite;
if(argc <= 1)
{
printf("Usage: ./fifo_writestring\n");
exit(1);
}
sscanf(argv[1], "%s", buff);
/* 以只写阻塞方式打开FIFO管道 */
fd = open(MYFIFO, O_WRONLY);
if (fd == -1)
{
printf("Open fifo fileerror\n");
exit(1);
}
/*向管道中写入字符串*/
if ((nwrite = write(fd, buff,MAX_BUFFER_SIZE)) > 0)
{
printf("Write '%s' toFIFO\n", buff);
}
close(fd);
exit(0);
}
(2)读管道的程序
#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
#define MYFIFO "/tmp/myfifo"
#defineMAX_BUFFER_SIZE PIPE_BUF /*定义在于limits.h中*/
int main()
{
char buff[MAX_BUFFER_SIZE];
int fd;
int nread;
/* 判断有名管道是否已存在,若尚未创建,则以相应的权限创建*/
if (access(MYFIFO, F_OK) == -1)
{
if ((mkfifo(MYFIFO, 0666) < 0)&& (errno != EEXIST))
{
printf("Cannot createfifo file\n");
exit(1);
}
}
/* 以只读阻塞方式打开有名管道 */
fd = open(MYFIFO, O_RDONLY);
if (fd == -1)
{
printf("Open fifo fileerror\n");
exit(1);
}
while (1)
{
memset(buff, 0, sizeof(buff));
if ((nread = read(fd, buff,MAX_BUFFER_SIZE)) > 0)
{
printf("Read '%s' fromFIFO\n", buff);
}
}
close(fd);
exit(0);
}