我正在尝试解决问题,因为我正在学习在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函数编辑该版本的代码。它无法正常工作,我正在寻找如何检查第一个命令是否正确完成。

最佳答案

只是为了让您入门。让我解释一下这个问题,因为我觉得您还不了解。



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



仅当 cmd1完成正常执行时,才可以执行cmd2


cmd1的执行不依赖于cmd2



您在这里似乎很困惑。在这里,他们的意思是说,可以通过将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))if((cmd1 = (-1)))
  • 您正在检查失败的返回值是否为-1。这是不正确的。成功的退出代码为0,失败的返回值为0以外的任何其他值。因此,if(cmd1 != 0)应该是ojit_code。
  • 关于c - 使用SIGQUIT和SIGINT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30331173/

    10-13 00:33