Не удалось вызвать «pbmtextps» с execve () в C? - PullRequest
0 голосов
/ 11 ноября 2018

На моем терминале Linux, когда я печатаю

pbmtextps cat | pamfile

и нажмите ввод.

Это дает мне следующий вывод,

stdin:  PBM raw, 83 by 104

Однако я пытаюсь вызвать "pbmtextps", используя execve () в моей основной программе. Ниже приведен фрагмент программы:

char* haha[] = {"pbmtextps","cat","|", "pamfile", NULL};
if(execve("pbmtextps",haha, NULL) == -1){
    fprintf(stderr, "%s\n", "NOT ok");
   }
else{
    fprintf(stdout, "%s\n", "OK");
}

После запуска программы программа выводит «Not ok». Я запускаю программу в том же каталоге на том же терминале.

1 Ответ

0 голосов
/ 11 ноября 2018

execve() не ищет путь для запуска программы, поэтому вам нужно дать ему правильное абсолютное или относительное имя файла. Он также не использует оболочку, поэтому то, что вы пытаетесь сделать, не будет работать. Все аргументы передаются непосредственно выполняемой программе.

Он также не возвращается при успехе, потому что нечего возвращать в , поэтому нет смысла печатать сообщение об успехе.

...