使用 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) 和第二个命令 ( cmd2) 使用 Ctrl+C (SIGINT)。如果第二个命令被取消,第一个命令必须正常完成。

我在声明的第二部分遇到了问题,因为我从来没有在 C 中使用过这种东西,而且我在 linux 方面真的很菜鸟。我尝试阅读有关 SIGQUIT 和 SIGINT 的内容,但我不理解我所阅读的所有内容,可能是因为 linux 的很多内容我还没有学到。

有人能帮帮我吗?

谢谢!

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

只是为了让你开始。我解释一下这个问题,感觉你没看懂

The statement of the problem says that I need to implement a code that allows to execute a command (cmd2) after the correct end of other command (cmd1).

用户cmd1cmd2会给你两个命令。 cmd1 应该先执行。

Next, statement says that if the first command doesn't finish correctly the second will not execute,

仅当 cmd1 正常执行完毕后才应执行 cmd2

If second command is canceled the first must be completed normaly.

cmd1 的执行不依赖于 cmd2

user can abort the execution of the cmd1 using Ctrl+\ or Ctrl+4 (SIGQUIT)

你在这里似乎很困惑。在这里,他们的意思是说,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)