我想通過父進程獲取命令並在不同的進程(子進程)中執行它。路徑變量和環境變量
#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'將熄滅。看看你打印出來的路徑。看看你傳遞給'execv'的'a'。然後將它們與'execv'期望的相匹配,並注意到什麼是錯誤的。 – Duck