使用SIGQUIT和SIGINT

时间:2015-05-19 16:27:43

标签: c linux 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的执行( cmd2)使用Ctrl + C(SIGINT)。如果取消第二个命令,则必须正常完成第一个命令。

我在声明的第二部分遇到了问题,因为我从来没有在C中使用过这种东西,而且我在linux中也是真正的noob。我试着读一些关于SIGQUIT和SIGINT的东西,但我不太了解我所读过的所有内容,可能是因为我还没有学到很多关于linux的东西。

有人可以帮我吗?

谢谢!

我使用if函数编辑此版本的代码。它没有正常工作,我找到了如何检查第一个命令是否正确完成。

1 个答案:

答案 0 :(得分:3)

只是为了让你开始。让我解释这个问题,因为我觉得你还没有理解它。

  

问题的陈述说我需要实现一个允许在其他命令(cmd1)正确结束后执行命令(cmd2)的代码。

用户cmd1cmd2将为您提供两个命令。 cmd1应该先执行。

  

接下来,声明说如果第一个命令没有正确完成,第二个命令将不会执行,

仅在 cmd1正常执行时才应执行cmd2

  

如果第二个命令被取消,第一个命令必须正常完成。

cmd1的执行不依赖于cmd2

  

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

你似乎很困惑。这里,他们的意思是说,cmd1可以通过将SIGQUIT传递给它来异常终止(Ctrl + \或Ctrl + 4),在这种情况下cmd2不应该被执行。您 NOT 必须对信号部分进行编码。您需要做的是,检查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)