linux fcntl - 取消设置标志
如何使用 fcntl 取消设置已设置的标志?
例如,我可以使用现在将套接字设置为非阻塞模式
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK)
,我想取消设置 O_NONBLOCK 标志。
我尝试了 fcntl(sockfd, F_SETFL, flags | ~O_NONBLOCK)。 它给了我错误 EINVAL
How do i unset a already set flag using fcntl?
For e.g. I can set the socket to nonblocking mode using
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK)
Now, i want to unset the O_NONBLOCK flag.
I tried fcntl(sockfd, F_SETFL, flags | ~O_NONBLOCK). It gave me error EINVAL
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
未经测试,但希望这会有所帮助。 :-)
Untested, but hope this helps. :-)
如果你这样做,已经设置的 O_NONBLOCK 将被取消设置。
此处,flags 包含您要取消设置的标志。
完成 AND(&) 运算后,您必须再次使用 val 中的值设置标志。
我希望这能帮到您。
If you do like this,The already set O_NONBLOCK will unset.
here,flags contains the which flags you want to unset.
After finishing the AND(&) operation,again you have to set the flag using the value in val.
I hope this will help you.
以下代码将取消设置一个标志,例如 O_NONBLOCK 标志:
问候
The following code will unset a flag, for example, the O_NONBLOCK flag:
Regards
尝试取消设置所有标志:
此外,将标志与
~O_NONBLOCK
进行 OR 运算是没有用的,您需要对其进行 AND 操作,因为您想要的是取消设置 O_NONBLOCK 位。Tried unsetting all flags:
Also OR-ing the flags with
~O_NONBLOCK
is of no use, you need to AND it, since what you want is to unset the O_NONBLOCK bit(s).