我正在尝试创建一个程序,它将文件转换为2个pat,然后调用linux'cmp命令来比较它们。
如果他们相等,我想返回2,如果他们不同,1。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, const char* argv[])
{
pid_t pid;
int stat;
//child process
if ((pid=fork())==0)
{
execl("/usr/bin/cmp", "/usr/bin/cmp", "-s",argv[1], argv[2], NULL);
}
//parent process
else
{
WEXITSTATUS(stat);
if(stat==0)
return 2;
else if(stat==1)
return 1; //never reach here
}
printf("%d\n",stat);
return 0;
}
由于某种原因,如果文件相同,我确实成功返回2,但如果它们不同,则不会进入if(stat == 1),而是返回0。 为什么会这样?我检查了通过终端的文件上的cmp确实返回1,如果它们不同,那么为什么这不起作用?
答案 0 :(得分:2)
这样做:
//parent process
else
{
// get the wait status value, which possibly contains the exit status value (if WIFEXITED)
wait(&status);
// if the process exited normally (i.e. not by signal)
if (WIFEXITED(status))
// retrieve the exit status
status = WEXITSTATUS(status);
// ...
答案 1 :(得分:1)
在您的代码中:
WEXITSTATUS(&stat);
尝试从指针中提取状态,但WEXITSTATUS()
将int
作为参数。
必须:
WEXITSTATUS(stat);