【发布时间】:2017-12-10 10:50:05
【问题描述】:
可以通过系统调用write(2) 知道我发送数据的 fd 是打开还是关闭?
我的问题是我正在写一个有时关闭有时打开的 fd。我认为write这种情况一定有办法知道,但我找不到。
【问题讨论】:
-
write(2)有返回值。 -
为什么你的代码试图写入一个已经关闭的文件描述符?除非这是一个套接字(远程端点关闭了连接),否则如果您有尝试写入句柄的代码可能已在程序的其他地方关闭,则它说明您的程序中的错误。还是我错过了什么?
-
@selbie 连接关闭时套接字不会关闭,所以没有异常。
-
"我的问题是我正在写一个有时关闭有时打开的 fd。" 不,你的程序设计有问题。只需跟踪 fd 的状态。
-
@soissy 您的 fd 始终有效,无论客户端进程是否死亡。如果
write阻止了你,那么客户端进程没有死,或者有另一个 fd 引用同一个对象,可能是 your 进程(服务器?)。你可能在分叉后忘记关闭它。
标签: c file-descriptor errno