我正在尝试解决问题,因为我正在学习在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
应该首先执行。
仅当 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)))
if(cmd1 != 0)
应该是ojit_code。 关于c - 使用SIGQUIT和SIGINT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30331173/