我正在将LynxOS程序迁移到ubuntu发行版和gcc 4.1.3
我几乎完成了,但我有一个问题,我正在接收SIGALRM信号,这迫使我的程序退出。如果我不报警,我不知道为什么会收到这个信号。
我用sigaction绕过了这个问题,但是我的程序没有正常工作mq_receive每次接收到这个SIGALRM时都会失败。
我想知道是不是因为这个代码翻译:

#include <events.h>
#include <timers.h>

evtset_t EvtMask;
struct timespec Time;

Time.tv_sec = 2;
Time.tv_nsec = 0;
evtsuspend (&EvtMask, &Time);

现在是
sleep(2);

这是LynxOS提供的有关evtsuspend的信息:
evtsuspend
(由于我名声不好,无法插入图片)
你觉得他们工作一样吗?(不指定事件掩码)sleep()还等待SIGALRM继续。
谢谢和问候

最佳答案

1)试着在你的程序上运行strace,看看你是否能找到更多的信息。
很高兴有更多关于你的程序的细节。。。但也许这会有帮助。
可能mq_receive()超时了。我认为SIGALRM用于通知应用程序超时的系统调用。
或者更可能的是,你在代码中使用了导致SIGALRM的其他东西,例如:setitimer()
关于在linux上使用sleep(2)的问题。如果你希望程序在睡眠(2)调用期间阻塞,那么是的,你应该可以使用它。如果不希望它阻塞,那么启动一个间隔计时器setitimer()并使用它。注意:当计时器触发时,setitimer()使用SIGALRM。。。有关详细信息,请参见manpage

10-04 17:59