Я использую linux, и я хочу написать программу в c, которая читает команды от пользователя до тех пор, пока я не войду в стоп. Для каждой команды основная программа создаст процесс A, который создаст другой процесс B. процесс B выполнит команду, введенную пользователем. Я хочу заставить его работать с помощью exec, но он работает только для команд с одним словом (например: pwd
, ls
), если я вхожу, например, ls -l
, он говорит, что такого файла или каталога нет Код, который я написал до сих пор:use exec in c program
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define N 100
int main() {
char input[N];
scanf(" %[^\n]s",input); //reads from user inputs that can include space
while (strcmp(input,"stop") != 0) { // verifies if entered command == stop
int a;
a = fork();//creates the process A
if (a == -1) {
perror("fork imposibil!");
exit(1);
}
if (a == 0) {
printf("a\n");//i printed that to verify if my fork works
int b;
b = fork();//creates process B
if (b == -1) {
perror("fork imposibil!");
exit(1);
}
if (b == 0) { // the part that makes me problems , i try to use exec to execute the command that is stored in input
printf("b\n");
if (execlp(input,"",(char*) 0) < 0) {
perror("Error exec");
exit(0);
}
exit(0);
}
wait(0);
exit(0);
}
wait(0);
scanf(" %[^\n]s",input);
}
return 0;
}
Может кто-нибудь помочь мне, пожалуйста? P.S. Я не думаю, что мой код был настолько невозможным для чтения, но я надеюсь, что сейчас лучше.
Прежде всего научиться писать читаемый код, а затем вы можете задать вопрос, потому что чтение кода, как это было, почти невозможное.Например, я не видел 'exit()' after' perror() ', не видел его вообще, и я подумал:« К сожалению, он сообщает об ошибках, но все равно игнорирует их. И я думаю, вы должны вызывать '_exit (0)' вместо 'exit (0)' из дочернего процесса. –