Я пытаюсь получить команду через родителя и выполнить ее в другом процессе (дочерний процесс).Переменные пути и переменные окружения
#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<malloc.h>
int main(){
pid_t pid = -1;
int status = -1;
char* ip = malloc(20);
char* a[20];
int pd[2];
char* path = NULL;
path = getenv("PATH");
printf("\n path : %s \n",path);
a[0] = malloc(10);
while(1){
pipe(pd);
pid = fork();
if(pid == 0){
//printf("\n Child! - pid : %d \n",getpid());
sleep(1);
close(pd[1]);
read(pd[0],ip,20);
a[0] = ip;
//execl(ip,ip,NULL);
execv(path,a);
exit(0);
}
else{
//printf("\n Parent! - pid : %d \n",getpid());
printf("(Enter a executable)$ ");
scanf("%s",ip);
//printf("\n %s \n",ip);
close(pd[0]);
write(pd[1],ip,20);
waitpid(pid,&status,0);
//printf("\n The child %d exited with status : %d \n",pid,status);
}
}
free(ip);
return 0;
}
В чем разница между дорогой и окружающей средой. Функция getenv дает мне весь путь к исполняемому файлу. Вышеупомянутая программа не выполняет команду ls -l.
Я хочу выполнить команды ls -l, и вывод должен отображаться на экране, а также должен храниться в файле. Я попытался выполнить команду ls -l. Но его не выполняет. Есть ли способ вывода ls -l в файл при его выводе на экран?
Коды возврата, коды возврата, коды возврата. Сохраняйте время и здравомыслие с помощью 'perror' и/или' strerror'. – Duck
Среда содержит пары строк имен переменных и их значений. PATH является одной из этих переменных и содержит пути к различным исполняемым файлам. Он может содержать один или (вероятно) * много * таких путей, разделенных двоеточием. Ваш 'execv' собирается вспыхнуть. Посмотрите, что вы распечатываете для пути. Посмотрите, что вы проходите как «a» на «execv». Затем сопоставьте их с тем, что ожидает 'execv', и заметьте, что не так. – Duck