Добрый вечер
Я нашел несколько похожих вопросов, но ничего, что было бы достаточно для этого конкретного вопроса.
Я разветвляю дочерний процесс и пытаюсь вызвать execvp для запуска простой программы, которая выводит 3 символа на стандартный вывод. Имя запускаемой программы исходит от пользователя.
По какой-то причине каждый вызов execvp терпит неудачу для simpleO:
Я компилирую файл simpleO.c в simpleO, а затем компилирую и запускаю fork.c. Я набираю simpleO в приглашении, когда меня просят попытаться запустить, но каждый раз я получаю сообщение об ошибке. Вот код.
Сообщение об ошибке, напечатанное perror: «Нет такого файла или каталога».
--
fork.c
#include <stdio.h>
#include <unistd.h>/*fork, exec*/
#include <errno.h>/*errno*/
#include <string.h> /*strerror*/
#include <stdlib.h>/*EXIT_FAILURE*/
#define BUFFERSIZE 100
int main(int argc, char *argv[]){
int i = 0;
pid_t pid;
int status;
char buffer[BUFFERSIZE];
fgets(buffer, BUFFERSIZE, stdin);
argv[0] = strtok(buffer, " ");
while (buffer[i] != '\0') {/*analyze each char*/
if (buffer[i] == ' ')/*based on how many spaces there are*/
argv[i] = strtok(NULL, " ");/*tokenize, populate argv*/
i++;
}
if((pid = fork()) == -1){
fprintf(stderr, "fork error: %s\n", strerror(errno));
return EXIT_FAILURE;}
else if (pid==0) {
int e = execvp(argv[0],argv);
if (e==-1) {
perror("Exec failed");
printf("Process %s\n",argv[0]);
perror("Process did not run");
exit(1);
}
}
else{
wait(&status);}
return 0;
}
--
простой O.c
#include <stdio.h>
int main(int argc, char **argv){
printf("%c",'c');
printf("%c",'2');
printf("%c",'1');
return 0;
}
Addl ref: perror печатает «Нет такого файла или каталога»
perror
, чтобы те из нас, у кого нет экстрасенсорных способностей, могли видеть то, что видите вы. - person rici   schedule 08.03.2017array_of_pointers
не объявлен. - person kaylum   schedule 08.03.2017while
просто тарабарщина. Гдеi
объявляется и инициализируется? Как вы думаете, почему его значение каким-либо образом влияет на вызовstrtok
? И почему вы думаете, чтоargv
достаточно большой, чтобы вместить все слова в вашей строке ввода, даже если вам удастся их разделить? - person rici   schedule 08.03.2017