Я пытаюсь создать программу, которая получает 2 патча для файлов на главную и вызывает команду cmp linux для их сравнения.Вызов командной строки linux cmp с программой C
Если они равны, я хочу вернуться 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, но если они 're different, он не войдет в if (stat == 1), а для возврата 0. Почему это происходит? Я проверил, что cmp на файлах через терминал действительно возвращает 1, если они разные, поэтому почему это не работает?
Там в макрос 'WEXITSTATUS' для получения возвращаемого значения. Также убедитесь, что cmp возвращает значение один из ошибок, а не 'non-zero'. – Aneri
он возвращает> 1 на ошибку, и 1, если файлы отличаются. Зачем? – Jjang
P.S изменен на WEXITSTATUS, теперь он всегда возвращает 2 (stat == 0 всегда) – Jjang