我在 linux 的守护进程中使用端口时遇到问题。我使用open
from fcntl.h
likeserHandle_ = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
并且在守护进程中使用它时得到0
结果。当我在守护程序之外使用它时,一切正常。我已经设置了sudo chmod 666 /dev/ttyUSB0
。
你知道问题可能是什么吗?也许权限?即使我以超级用户身份启动守护程序,我仍然会0
从open
.
下面你可以看到我的类方法的代码片段,它应该初始化守护进程:
Bool DaemonStarter::initialize()
{
isInitialized_ = false;
if (workingDirectory_ == "" ||
!boost::filesystem3::exists(workingDirectory_))
return false;
Bool res = true;
::setlogmask(LOG_UPTO(LOG_NOTICE));
::openlog(name_.c_str(), LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);
pid_t pid, sid;
pid = fork();
if (pid < 0)
{
res = res && false;
::exit(EXIT_FAILURE);
}
if (pid > 0)
{
res = res && true;
::exit(EXIT_SUCCESS);
}
::umask(0);
sid = ::setsid();
if (sid < 0)
{
res = res && false;
::exit(EXIT_FAILURE);
}
if ((chdir(workingDirectory_.c_str())) < 0)
{
res = res && false;
::exit(EXIT_FAILURE);
}
for (UInt i = ::sysconf (_SC_OPEN_MAX); i > 0; i--)
::close (i);
::umask(0);
::close(STDIN_FILENO);
::close(STDOUT_FILENO);
::close(STDERR_FILENO);
isInitialized_ = res;
return res;
}