管道和FIFO額外屬性

管道和FIFO,若是在讀模式打開以前沒有以寫模式打開,那麼將一直阻塞下去。函數

FIFO只能用於單臺主機上通訊,不能在NFS文件系統上通訊。測試

FIFO是能夠經過open打開的,這時,咱們就能夠啓用O_NONBLOCK標誌。大數據

可是對於管道來講,因其沒有open步驟,因此咱們經過fcntl()函數進行修改。code

#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* arg */ );

 

OPEN_MAX:一個進程在任意時刻能夠打開的最大描述符,用sysconf()函數測量。進程

#include <unistd.h>
long sysconf(int name);

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測試這兩個系統變量
}
相關文章
相關標籤/搜索