管道和FIFO,若是在讀模式打開以前沒有以寫模式打開,那麼將一直阻塞下去。函數
FIFO只能用於單臺主機上通訊,不能在NFS文件系統上通訊。測試
FIFO是能夠經過open打開的,這時,咱們就能夠啓用O_NONBLOCK標誌。大數據
可是對於管道來講,因其沒有open步驟,因此咱們經過fcntl()函數進行修改。code
#include <unistd.h>
OPEN_MAX:一個進程在任意時刻能夠打開的最大描述符,用sysconf()函數測量。進程
#include <unistd.h>PIPE_BUF:若是寫入的數據小於PIPE_BUF,那麼write操做保證是原子的,也就是說能夠原子地寫入一個管道或FIFO的最大數據量。ip
PIPE_BUF一般定義在<limits.h>頭文件中,可是POSIX認爲它是一個路徑名變量,這意味着它的值能夠隨指定的路徑名而變化。cmd
#include <unistd.h>
long fpathconf(int fd, int name);
long pathconf(char *path, int name);it
代碼:pip
/*打印系統中的PIPE_BUF,OPEN_MAXA*/ //pipeconf.c #include <stdio.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 2) { printf("usage: pipeconf<pathname>\n");//提示要輸入路徑 exit(1); } printf("PIPE_BUF = %ld, OPEN_MAX = %ld\n",pathconf(argv[1], _PC_PIPE_BUF), sysconf(_SC_OPEN_MAX)); exit(0);//用pathconf,sysconf測試這兩個系統變量 }