2

我有一个简单的 C++ 工具,它作为守护进程运行,并会在 Debian 下不断地从串行端口读取数据(在本例中为 Raspbian,因为它在 RaspberryPi 上运行)。问题在于,当涉及到代码的 open() 语句时,该工具显然会阻止该过程。“顶部”中没有可见的处理时间,它只是挂起。无论哪个用户(甚至是 root)执行它,并且串行端口的访问权限也已检查过,都会发生这种情况。它发生在任何(内部或 USB)串行端口上。一旦我开始,配置并退出该端口上的 minicom 或屏幕,它就会工作。有谁知道我在这里做错了什么或错过了什么?这是阻塞语句的代码,包括和排除的注释:

int main(void)
{
pid_t pid, sid;
pid = fork();
if (pid < 0) {
    exit(EXIT_FAILURE);
}
if (pid > 0) {
    std::cout << "\n" << pid;
    exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
    /* Log the failure */
    exit(EXIT_FAILURE);
}

if ((chdir("/")) < 0) {
    /* Log the failure */
    exit(EXIT_FAILURE);
}

    close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);


int tty_fd;
struct termios tio;

unsigned char c = 0;

//const char *device = "/dev/ttyUSB0";
const char *device = "/dev/ttyAMA0";

tty_fd = open(device, O_RDONLY | O_NOCTTY);  //<-- Seems to hang here!
if(tty_fd < 0){
    perror("Error opening Serial Port: ");
}
etc....

感谢我能得到的所有帮助。

4

0 回答 0