gpt4 book ai didi

c - 使用 SIGQUIT 和 SIGINT

转载 作者:太空狗 更新时间:2023-10-29 12:02:23 26 4
gpt4 key购买 nike

我正在尝试解决一个问题,因为我正在学习在 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) 中止 cmd1 的执行使用 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。您不必对信号部分进行编码。您需要做的是,检查 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).

关于c - 使用 SIGQUIT 和 SIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30331173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com