|
首先声明一下环境是CYGWIN:
c文件内容如下
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include <errno.h>
- #include <string.h>
- #include <fcntl.h>
- #define S_ALLPERM (S_IRWXU | S_IRWXG | S_IRWXO)
- int main()
- {
- umask(0);
- char buf[2];
- if (-1 == mkfifo("a_b",O_RDONLY|S_ALLPERM))
- {
- if (EEXIST != errno)
- {
- printf("make fifo failed: %s\n",strerror(errno));
- return -1;
- }
- }
- #ifdef READFIFO
- int fd = open("a_b",O_RDONLY);
- #else
- int fd = open("a_b",O_WRONLY);
- #endif
- if (-1 == fd)
- {
- printf("can not open fifo :%s\n",strerror(errno));
- return -1;
- }
- //set nonblock
- #ifdef NOWAIT
- if (-1 == fcntl(fd,F_SETFL,fcntl(fd,F_GETFL)|O_NONBLOCK))
- {
- printf("set non block failed: %s\n",strerror(errno));
- }
- #endif
-
- #ifdef READFIFO
- if (-1 == read(fd,buf,2))
- {
- printf("can not read pipe: %s\n",strerror(errno));
- return -1;
- }
- printf("read over\n");
- #else
-
- if (-1 == write(fd,"ab",2))
- {
- printf("can not write pipe: %s",strerror(errno));
- return -1;
- }
- printf("write over\n");
- #endif
- return 0;
- }
复制代码
编译方法
- 606 gcc -o readfifo -DREADFIFO testfifo.c -DNOWAIT -g
- 607 gcc -o writefifo testfifo.c -DNOWAIT -g
复制代码
调用readfifo可以马上返回资源不可用,但是writefifo不管是block还是non block都停住.
大家可以自己测一下 |
|