[英]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)。
用戶cmd1
和cmd2
將給您兩個命令。 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;
}
在這里,您使用=
進行比較。 =
用於分配,而不用於平等同情。 ==
用於平等同情。 因此, if((cmd1 = (-1)))
和if(cmd1=(0))
應該是if((cmd1 == (-1)))
和if(cmd1 == (0))
您正在檢查失敗的返回值是否為-1。 這是不正確的。 成功的退出代碼為0,失敗的值為0以外的任何其他值。因此, if((cmd1 = (-1)))
應該是if(cmd1 != 0)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.