簡體   English   中英

使用SIGQUIT和SIGINT

[英]use SIGQUIT and SIGINT

我正在嘗試解決問題,因為我正在學習在C語言中使用系統調用。我使用的是Ubuntu 12.04 64位。

問題的陳述說,我需要實現一個代碼,該代碼允許在其他命令(cmd1)正確結束之后執行命令(cmd2)。 還說用戶可以同時指定命令和用戶所需的所有參數。

至此,我創建了這個小程序:

#include <syscall.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>


int main(void) 
{
    int cmd1 = system("sleep 5");


    if((cmd1 = (-1)))
    {
        write(1,"error in command 1",18);
    }
    if(cmd1=(0))
    {
        write(1, "hello world", 11);
    }
    return EXIT_SUCCESS;
}

接下來,語句表明,如果第一個命令未正確完成,第二個命令也將不執行,用戶也可以使用Ctrl + \\或Ctrl + 4(SIGQUIT)中止cmd1的執行,而使用Ctrl +中止第二個命令(cmd2) C(SIGINT)。 如果取消了第二個命令,則第一個命令必須正常完成。

我在聲明的第二部分中遇到問題,因為我從未在C中使用過這種東西,而且在Linux中我確實是菜鳥。 我試圖閱讀有關SIGQUIT和SIGINT的內容,但我不了解所讀內容,可能是因為有很多我還沒有學到的Linux知識。

誰能幫我嗎?

謝謝!

我使用if函數編輯該版本的代碼。 它不能正常工作,我正在尋找如何檢查第一個命令是否正確完成。

只是為了讓您入門。 讓我解釋一下這個問題,因為我覺得您還不了解。

問題的陳述說,我需要實現一個代碼,該代碼允許在其他命令(cmd1)正確結束之后執行命令(cmd2)。

用戶cmd1cmd2將給您兩個命令。 cmd1應該首先執行。

接下來,聲明說,如果第一個命令未正確完成,第二個命令將不會執行,

僅當 cmd1完成正常執行后,才應執行cmd2

如果取消了第二個命令,則第一個命令必須正常完成。

cmd1執行不依賴於cmd2

用戶可以使用Ctrl + \\或Ctrl + 4(SIGQUIT)中止cmd1的執行

您似乎在這里感到困惑。 在這里,他們的意思是說,可以通過將SIGQUIT傳遞給cmd1 (Ctrl + \\或Ctrl + 4)來異常終止,在這種情況下,不應執行cmd2 不必到信號部件代碼。 您要做的是,檢查cmd1是如何終止的,然后執行cmd2如果這是正常終止),否則不要執行cmd2。

注意發布上述部分時,問題中的代碼有很大不同。


這是您的代碼,格林尼治標准時間2015年5月20日,星期三,上​​午5:02。(由於您更改代碼的次數過多且過多,因此必須包含此代碼)

int main(void) 
{
    int cmd1 = system("sleep 5");
    if((cmd1 = (-1)))
    {
        write(1,"error in command 1",18);
    }
    if(cmd1=(0))
    {
        write(1, "hello world", 11);
    }
    return EXIT_SUCCESS;
}
  1. 在這里,您使用=進行比較。 =用於分配,而不用於平等同情。 ==用於平等同情。 因此, if((cmd1 = (-1)))if(cmd1=(0))應該是if((cmd1 == (-1)))if(cmd1 == (0))

  2. 您正在檢查失敗的返回值是否為-1。 這是不正確的。 成功的退出代碼為0,失敗的值為0以外的任何其他值。因此, if((cmd1 = (-1)))應該是if(cmd1 != 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM