【求助】文件open函数打开时的O_NONBLOCK 什么意思

li32768 2009-04-21 10:14:35
【求助】文件open函数打开时的O_NONBLOCK 什么意思啊,
另外,fcntl 是否操作的必须是 fopen 打开的文件 ;ioctl 操作的是 open 函数打开的文件 ,能不能相互的操作,比如:fcntl 操作由 open 函数打开的文件 ;
也许很基本的 ,刚开始学 驱动程序 的编写,产生了一些疑问,感觉有点乱,
先谢谢了
O(∩_∩)O~
...全文
4610 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zja129haha 2011-12-07
  • 打赏
  • 举报
回复
fcntl 至少可以直接操作socket句柄,例如下面的s:
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
azs14789 2011-06-16
  • 打赏
  • 举报
回复
3q啊
ggqiye009738 2011-06-16
  • 打赏
  • 举报
回复
谢谢,懂了
听雨楼Leeon 2009-08-28
  • 打赏
  • 举报
回复
可以用fdopen打开一个FILE*结构,返回一个fd
li32768 2009-04-28
  • 打赏
  • 举报
回复
应该是不可以的,返回的是 FILE* 结构,并不是整型的
但 open 可以返回整型的,其实那个 blackbillow 没有看清我的话,估计
结贴得了
Bestrem_9 2009-04-28
  • 打赏
  • 举报
回复
fopen不是可以返回一个fd的吗?弱弱的问
blackbillow 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 li32768 的回复:]
谢谢楼上各位了,关于阻塞与非阻塞我想我已经明白的差不多了,那下面一个问题了,哪位高手给我指点下,谢谢了
也就是 :
另外,fcntl 是否操作的必须是 fopen 打开的文件 ;ioctl 操作的是 open 函数打开的文件 ,能不能相互的操作,比如:fcntl 操作由 open 函数打开的文件 ;
也许很基本的 ,刚开始学 驱动程序 的编写,产生了一些疑问,感觉有点乱,
先谢谢了
O(∩_∩)O~
[/Quote]
你在鬼扯:
FILE *fopen(const char *path, const char *mode);
int fcntl(int fd, int cmd, ... /* arg */ );
cfy84 2009-04-23
  • 打赏
  • 举报
回复
fcntl可用open函数打开的文件句柄。
li32768 2009-04-22
  • 打赏
  • 举报
回复
谢谢楼上各位了,关于阻塞与非阻塞我想我已经明白的差不多了,那下面一个问题了,哪位高手给我指点下,谢谢了
也就是 :
另外,fcntl 是否操作的必须是 fopen 打开的文件 ;ioctl 操作的是 open 函数打开的文件 ,能不能相互的操作,比如:fcntl 操作由 open 函数打开的文件 ;
也许很基本的 ,刚开始学 驱动程序 的编写,产生了一些疑问,感觉有点乱,
先谢谢了
O(∩_∩)O~
xempo 2009-04-21
  • 打赏
  • 举报
回复
一般用fopen,推荐!
xhy_851221 2009-04-21
  • 打赏
  • 举报
回复
非阻塞的方式打开文件
jangshi 2009-04-21
  • 打赏
  • 举报
回复
在内核中是,检测其标志!如果存在O_NONBLOCK,读写操作将会立即返回,否则内核通过调度其它进程阻塞当前进程!当目的事件发生时内核会唤醒它!
子晞 2009-04-21
  • 打赏
  • 举报
回复
apue说到非堵塞要分析两种系统调用,低速的系统调用和其它的系统调用。那么低速的系统调用可能是进程堵塞。例如对不存在的数据进行读操作,可能是调用者永远阻塞,因为他得等读到了数据才返回;如果某个文件描述符拒绝某个写操作,写操作不能完成而阻塞;打开某些类型没有准备好的文件的文件也会引起阻塞;以及对强制性记录锁读或写;某些ioctl操作;某些进程间的通信。
非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。
对于一个给定的描述符两种方法对其指定非阻塞I/O:
(1)调用open获得描述符,并指定O_NONBLOCK标志
(2)对已经打开的文件描述符,调用fcntl,打开O_NONBLOCK文件状态标志。
int flags,s为描述符

flags = fcntl( s, F_GETFL, 0 ) )
fcntl( s, F_SETFL, flags | O_NONBLOCK )
li32768 2009-04-21
  • 打赏
  • 举报
回复
我也知道是非阻塞,但关键非阻塞设个什么概念,是指当前进程不可以被阻塞么,还是该文件不可以被别的在访问,但后者我编程实验发现不对 ;或者说文件以非阻塞打开与阻塞打开会有什么具体的区别

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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