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