当前位置: 技术问答>linux和unix
请教下各位高手关于mkfifo的问题
来源: 互联网 发布时间:2016-11-26
本文导语: 本人是linux初学者,写fifo的程序时遇到些疑惑,上网搜索了半天未果,现在请教各位高人: 1. mkfifo() 的参数 mode 怎么使用的?每个参数对应的数字是多少?我写 mkfifo(filename,O_CREAT) 编译通不过,说 O_CREAT 未声明...
本人是linux初学者,写fifo的程序时遇到些疑惑,上网搜索了半天未果,现在请教各位高人:
1. mkfifo() 的参数 mode 怎么使用的?每个参数对应的数字是多少?我写 mkfifo(filename,O_CREAT) 编译通不过,说 O_CREAT 未声明,我写 mkfifo(filename,0777) 就能通过;
2. fifo 是否支持2个以上的进程对他进行读写?
1. mkfifo() 的参数 mode 怎么使用的?每个参数对应的数字是多少?我写 mkfifo(filename,O_CREAT) 编译通不过,说 O_CREAT 未声明,我写 mkfifo(filename,0777) 就能通过;
2. fifo 是否支持2个以上的进程对他进行读写?
|
1. 你可以看apue2nd这本书,其实
int mkfifo(const char *pathname, mode_t mode);
的mode参数是跟
int open(const char *pathname, int flags, mode_t mode);
里的mode参数是一样的。
而你所说的O_CREAT是open中的flags参数的值。你可以通过man 2 open发现
flags,mode可以取哪些值。
2. 可以
见apue2nd 15.5
It is common to have multiple writers for a given FIFO. This means that we have to worry about atomic writes if we don't want the writes from multiple processes to be interleaved. (We'll see a way around this problem in Section 17.2.2.) As with pipes, the constant PIPE_BUF specifies the maximum amount of data that can be written atomically to a FIFO.
int mkfifo(const char *pathname, mode_t mode);
的mode参数是跟
int open(const char *pathname, int flags, mode_t mode);
里的mode参数是一样的。
而你所说的O_CREAT是open中的flags参数的值。你可以通过man 2 open发现
flags,mode可以取哪些值。
2. 可以
见apue2nd 15.5
It is common to have multiple writers for a given FIFO. This means that we have to worry about atomic writes if we don't want the writes from multiple processes to be interleaved. (We'll see a way around this problem in Section 17.2.2.) As with pipes, the constant PIPE_BUF specifies the maximum amount of data that can be written atomically to a FIFO.
|
其实碰到这种未申明的一般都是头文件引用的问题或拼写错误。
|
个人觉得其实你这么用还是不对的:
O_CREAT当然也是某个值,只是语义还是不通的。
欢迎拍砖。