我在linux中的守护进程中使用端口时遇到问题。
我使用来自open
的{{1}},例如fcntl.h
,当我在守护程序中使用它时,我得到serHandle_ = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
。当我在守护进程外使用它时一切正常。我设置了0
。
您是否知道问题可能是什么?也许权限?即使我以超级用户身份启动守护程序,我仍然会从sudo chmod 666 /dev/ttyUSB0
获得0
。
下面你可以看到我的类方法的代码片段,它应该初始化守护进程:
open
答案 0 :(得分:2)
来自man
的{{1}}页:“open()和creat()返回新的文件描述符,如果发生错误则返回-1”
open
是一个完全有效的文件描述符(对于非守护程序应用程序,是您的0
文件描述符)。如果stdin
失败,它将返回open
,因此您的代码工作正常。
答案 1 :(得分:1)
当您关闭标准文件描述符(stdin / stdout / stderr)时,下一次调用open
时可能会重用这些文件描述符。因此,当open
返回0
时,这很正常。
如果open
失败,则会返回-1
。
我建议您更仔细地阅读open
手册页。