sigaction

    1热度

    1回答

    我有以下结构: struct sigaction sa1; sa1.sa_flags=SA_SIGINFO; sa1.sa_flags=SA_NODEFER; sa1.sa_sigaction = handler; sigaction(SIGUSR1,&sa1,NULL); 如何使用SA_SIGINFO与SA_NODEFER沿不让第二个标志覆盖第一?

    0热度

    1回答

    我正在为大学做一个小型项目,我不知道如何在后台执行命令。我知道的一件事是我必须使用waitpid()和sigaction(),但我不知道如何。如果有人愿意帮我一把,我会很乐意。下面是我使用的代码的一部分,以利用minishell命令。 void execute_command_line(command* cmds, int n){ pid_t id,pid; int sta

    1热度

    1回答

    与How can I handle interrupt signal and call destructor in c++?相关,但我的问题是围绕着构建一个程序。 我正在写一个模拟程序,将数据写入HDF5文件。但是在程序中断的情况下,我希望HDF5能够正确关闭,以便累积的数据仍然可读。我编写了一个HDF5编写器类,它包含HDF5文件的句柄,如果调用该类的析构函数,HDF5文件应该关闭。因此,在通过

    1热度

    1回答

    我在Solaris平台上有一些遗留代码,我想将它移植到Linux,但是我在Linux上遇到了一些编译错误。 在Solaris上,我有下面的代码片段: #include <signal.h> ... void f() { struct sigaction a; sigaction(sig,0,&a); std::cout << (void *) a.sa_handl

    0热度

    1回答

    我正在开发一个在Raspberry-Pi(linux)上运行的程序,它从GPS模块获取数据并对其进行处理。 现在,该程序围绕着一个while(1)循环,该循环采用GPS数据并对其进行处理(数据以GPS模块的频率进行流式传输)。然而,我知道while(1)不是一个非常节能的解决方案,(这个RPi稍后会放在无人机上)。 我想设置一个计时器,只有当计时器结束时,程序才会获取GPS数据。理想情况下,程序将

    7热度

    2回答

    我正在玩C中的信号。我的主要功能基本上要求使用fgets(name, 30, stdin)进行一些输入,然后坐在那里等待。我用alarm(3)设置了一个闹钟,然后我重新分配了SIGALRM来调用函数myalarm,该函数简单地调用system("say PAY ATTENTION")。但是在闹铃响起后,fgets()停止等待输入,我的主要fn继续。即使我将myalarm更改为只设置了一些变量并且什

    0热度

    1回答

    我正在编写一个具有sigaction处理程序的C程序。如果SIGALRM不在一段时间,它也有一个itimerval。 处理程序应该 打印无限循环的总数完成 打印所经过的时间 出口(1); 我注意到,信号处理程序不带自定义参数,所以我有一个全局环计数器。 我的问题是:如何获得时间流逝?我能从计时器获得这些信息吗?我不完全了解定时器的用法。 另外,代码在终止之前在fprintf调用之后打印1个额外的整

    1热度

    1回答

    我试图做一个shell,只要它不能执行命令它说“执行二进制错误:-nameOfBinary-”。但问题是,它总是给我“没有这样的文件或目录”的消息。我的代码 继承人部分: void handle_SIGINT() { write(STDOUT_FILENO,line,strlen(line)); printf("\n"); struct sigaction handl

    1热度

    1回答

    更改默认操作在C语言中,我要赶在SIGINT信号,并打印出一个消息像 使用的sigaction并通过传递一个新的处理程序,以它 sa.sa_sigaction = handler; 我不“收到SIGINT”不想终止程序。 如果我通过shell运行程序并用Ctrl + c生成信号,信号处理程序将捕获信号并打印出我的信息。 之后,它将执行终止进程的默认操作。 我在做什么错? #include <s

    2热度

    3回答

    我想启动一个定时器,并在其过期时调用一个函数。 谷歌搜索发现了很多的例子,包括手册中的例子,所有的例子都使用sigaction()设置信号处理程序。 然而,@Patryk在this question,我们可以只 void cbf(union sigval); struct sigevent sev; timer_t timer; sev.sigev_notify = SIGEV_THREA