本次写的例程是关于FIFO管道的非阻塞读写操作。
不多说上代码。。。。
fifo_write.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
/* 定义fifo文件名 */
#define FIFO "/tmp/myfifo"
int main(int argc,char *argv[])
{
/* 判断是否已经存在,否则创建 */
if(access(FIFO,F_OK))
{
mkfifo(FIFO,0644);
}
/* 通过读写方式打开文件 */
int fd=open(FIFO,O_RDWR);
/* 设置为非阻塞模式 */
fcntl( fd, F_SETFL,fcntl(fd,F_GETFL)|O_NONBLOCK);
char msg[]="hello world!";
while(1)
{
agin:
n =write(fd,msg,sizeof(msg));
if(n==0) break;
else if(n==-1)
{
if(errno==EINTR)
goto agin;
else
{
perror("write failed");
break;
}
}
sleep(1);
}
return 0;
}
fifo_read.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#define FIFO "/tmp/myfifo"
int main(int argc,char *argv[])
{
if(access(FIFO,F_OK))
{
mkfifo(FIFO,0644);
}
int n;
int fd=open(FIFO,O_RDWR);
fcntl( fd, F_SETFL,fcntl(fd,F_GETFL)|O_NONBLOCK);
char msg[100];
while(1)
{
memset(msg,0,sizeof(msg));
agin:
n =read(fd,msg,sizeof(msg));
if(n==0) break;
else if(n==-1)
{
if(errno==EAGAIN||errno==EINTR)
goto agin;
else
{
perror("read failed");
break;
}
}
printf("msg:%s,errno:%d\n",msg,errno);
}
return 0;
}