Я запускаю процесс и запускаю команду wc
с использованием execl
. Теперь под правильными аргументами, она работает нормально, но когда я даю неверное имя файла, он выходит из строя, но в обоих случаях возвращаемое значение WEXITSTATUS(status)
всегда 0.WEXITSTATUS всегда возвращает 0
Я считаю, что что-то не так с тем, что я я делаю, но я не уверен, что это такое. Чтение справочных страниц и Google предполагает, что я должен получить правильное значение в соответствии с кодом состояния.
Вот мой код:
#include <iostream>
#include <unistd.h>
int main(int argc, const char * argv[])
{
pid_t pid = fork();
if(pid <0){
printf("error condition");
} else if(pid == 0) {
printf("child process");
execl("/usr/bin/wc", "wc", "-l", "/Users/gabbi/learning/test/xyz.st",NULL);
printf("this happened");
} else {
int status;
wait(&status);
if(WIFEXITED(status)) {
std::cout << "Child terminated normally" << std::endl;
printf("exit status is %d",WEXITSTATUS(status));
return 0;
} else {
}
}
}
Вы '#include'? –
@KerrekSB: если '' включает '' (или '' делает), тогда код не будет компилироваться без использования ''. (Сказав это, он скомпилировал ОК на Mac OS X 10.8.5 с GCC 4.8.1 без явного «», к моему большому удивлению!) Смешайте 'printf()' и 'cout' любопытно, будем ли мы сказать. Это C++ - просто. Но только так. Сообщения 'printf()' должны заканчиваться новой строкой. Когда я запускаю код, я получаю: 'wc: /Users/gabbi/learning/test/xyz.st: open: нет такого файла или каталога' и ' Ребенок завершен нормально 'и 'статус выхода 1' - как желательно. –
"* ... когда я даю неправильное имя файла ... *", пожалуйста, уточните, к какому имени файла вы обращаетесь. – alk