我试图解决问题,因为我正在学习使用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函数编辑此版本的代码。它没有正常工作,我找到了如何检查第一个命令是否正确完成。
答案 0 :(得分:3)
只是为了让你开始。让我解释这个问题,因为我觉得你还没有理解它。
问题的陈述说我需要实现一个允许在其他命令(cmd1)正确结束后执行命令(cmd2)的代码。
用户cmd1
和cmd2
将为您提供两个命令。 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;
}
您正在使用=
进行比较。 =
用于转让而不是平等同情。 ==
用于平等同情。因此,if((cmd1 = (-1)))
和if(cmd1=(0))
应该是if((cmd1 == (-1)))
和if(cmd1 == (0))
您正在检查返回值是否为-1表示失败。这是不正确的。成功的退出代码为0,因为失败是0以外的任何值。因此,if((cmd1 = (-1)))
应该是if(cmd1 != 0)
。