当前位置: 技术问答>linux和unix
怎么判断一个fd是否可读或者可写?
来源: 互联网 发布时间:2015-11-05
本文导语: 想在close之前作个判断 如果已经关闭的fd再次关闭会报错的说 | fcntl返回-1有很多原因,它可能还没到F_GETFL就返回-1了。 | 回复人: fierygnu(va_list) ( ) 信誉:105 2006-1-4 12:1...
想在close之前作个判断
如果已经关闭的fd再次关闭会报错的说
如果已经关闭的fd再次关闭会报错的说
|
fcntl返回-1有很多原因,它可能还没到F_GETFL就返回-1了。
|
回复人: fierygnu(va_list) ( ) 信誉:105 2006-1-4 12:13:39 得分: 0
YanDong_8212(谢科),不能这么用。
newbiestar()的方法就更有问题了。为了关闭,又dup了一个,那怎么能关闭呢?
这个问题属于应用自己的控制范围,需要程序员自己解决的。
============================
……您没有看懂我说的意思……
假设我现在要close(A),并且此时我确认B是可用的,那么我用dup2复制A为B,而dup2保证复制的时候A会被关闭,如果A本来就没有相关联的文件,那么直接就复制了。然后close(A)就确保没有问题了。
楼主的要求我仍然觉得很奇怪……close明明就会返回-1表示error,干啥还要检测?除非是FILE*,这个倒是会出问题(而且可能要buffered IO)
YanDong_8212(谢科),不能这么用。
newbiestar()的方法就更有问题了。为了关闭,又dup了一个,那怎么能关闭呢?
这个问题属于应用自己的控制范围,需要程序员自己解决的。
============================
……您没有看懂我说的意思……
假设我现在要close(A),并且此时我确认B是可用的,那么我用dup2复制A为B,而dup2保证复制的时候A会被关闭,如果A本来就没有相关联的文件,那么直接就复制了。然后close(A)就确保没有问题了。
楼主的要求我仍然觉得很奇怪……close明明就会返回-1表示error,干啥还要检测?除非是FILE*,这个倒是会出问题(而且可能要buffered IO)
|
用dup2是有风险的,它会丢掉close所能发现的所有问题,这是标准里不推荐的。在使用dup2之前,最好先close原来的描述符。
楼主的要求是奇怪 :)
楼主的要求是奇怪 :)
|
还是自己建立一个结构或者类吧
把fd和标志位关联
把fd和标志位关联