请教下各位高手关于mkfifo的问题

龙二伤 2009-01-07 10:34:22
本人是linux初学者,写fifo的程序时遇到些疑惑,上网搜索了半天未果,现在请教各位高人:
1. mkfifo() 的参数 mode 怎么使用的?每个参数对应的数字是多少?我写 mkfifo(filename,O_CREAT) 编译通不过,说 O_CREAT 未声明,我写 mkfifo(filename,0777) 就能通过;
2. fifo 是否支持2个以上的进程对他进行读写?
...全文
430 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangtacjd 2011-05-02
  • 打赏
  • 举报
回复
即使我包含了fcntl.h,也是出现了上述问题,,,

是不是环境变量的问题???
joyself 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ryuji1986 的回复:]
谢谢了,原来只要包含上fcntl.h就可以使用了~
[/Quote]

个人觉得其实你这么用还是不对的:
O_CREAT当然也是某个值,只是语义还是不通的。


欢迎拍砖。

erigido 2009-01-08
  • 打赏
  • 举报
回复
其实碰到这种未申明的一般都是头文件引用的问题或拼写错误。
龙二伤 2009-01-07
  • 打赏
  • 举报
回复
这些参数值好像就是chmod里用的~
龙二伤 2009-01-07
  • 打赏
  • 举报
回复
谢谢了,原来只要包含上fcntl.h就可以使用了~
joyself 2009-01-07
  • 打赏
  • 举报
回复
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.

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧