我试图解决一个问题,因为我正在学习使用C中的系统调用。我使用了Ubuntu12.04 64位。
这个问题的声明说,我需要实现一个允许在其他命令(cmd1)正确结束后执行命令(Cmd1)的代码。还表示用户可以同时指定命令和用户想要的所有参数。
此时,我创建了一个小程序:
#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;
}接下来,语句指出,如果第一个命令没有正确完成,那么第二个命令就不会执行,用户还可以使用cmd1或Ctrl+4 (Ctrl+4,SIGQUIT)中止执行第二个命令(cmd2),使用Ctrl+C (SIGINT)执行第二个命令(Cmd2)。如果第二个命令被取消,第一个命令必须正常完成。
在语句的第二部分中,我遇到了一些问题,因为我从来没有在C中使用过这类东西,而且在linux中我也是新手。我试着读一些关于SIGQUIT和SIGINT的文章,但是我不明白我读过的所有内容,可能是因为我还没有学到很多关于linux的东西。
有人能帮我吗?
谢谢!
我使用if函数编辑此版本的代码。它不能正常工作,我正在寻找如何检查第一个命令是否正确完成。
发布于 2015-05-19 18:26:49
只是为了让你开始。让我解释一下这个问题,因为我觉得你还不明白。
这个问题的声明说,我需要实现一个允许在其他命令(cmd1)正确结束后执行命令(Cmd1)的代码。
用户cmd1和cmd2将给您两个命令。应该首先执行cmd1。
接下来,语句指出,如果第一个命令没有正确完成,则第二个命令将不会执行,
只有当 cmd1正常执行时才能执行cmd2。
如果第二个命令被取消,第一个命令必须正常完成。
cmd1的执行不依赖于cmd2。
用户可以使用cmd1或Ctrl+\ (SIGQUIT)中止执行
你看上去很困惑。在这里,它们的意思是,通过将SIGQUIT (Ctrl+\或Ctrl+4)传递给它,可以不正常地终止cmd2,在这种情况下,不应该执行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)。https://stackoverflow.com/questions/30331173
复制相似问题