Tôi đang cố gắng mã hóa một trình bao. Nhưng vỏ của tôi không thực hiện lệnh - ls -l | ít hơn. Tôi đang sử dụng execvp. mã được đưa ra dưới đây.linux execvp; ls không thể truy cập |, Không có tập tin hoặc thư mục như vậy
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(){
int pid, status, num, len;
char str[1000], cwd[100];
char* word[100];
getcwd(cwd, sizeof(cwd));
while(1){
chdir(cwd);
printf("%s > ", cwd);
gets(str);
pid=vfork();
if(pid == 0){
num = 0;
word[num] = strtok (str, " ");
while (word[num] != NULL) {
word[num] = strdup (word[num]);
len = strlen (word[num]);
if (strlen (word[num]) > 0)
if (word[num][len-1] == '\n')
word[num][len-1] = '\0';
word[++num] = strtok (NULL, " ");
}
if(strcmp(word[0], "cd") == 0){
chdir(word[1]);
getcwd(cwd, sizeof(cwd));
}
else{
execvp(word[0],word);
}
exit(0);
}
else{
wait(&status);
}
}
return 0;
}
'|' là mã thông báo có liên quan đến trình bao, theo như tôi biết. Làm việc đó bên ngoài một hệ vỏ không thực sự hoạt động vì vỏ của nó đọc '|' và làm cho phép thuật xảy ra. Nếu không có vỏ để làm cho đường ống ma thuật xảy ra ... nó không hoạt động. – Cornstalks
SO có cách nào khác để tôi có thể chạy không? Tôi có thể bằng cách nào đó chuỗi và với sức mạnh vũ phu làm cho nó hoạt động –
@ Cornstalks nói thật sự. 'execvp' được viết để thực hiện một lệnh với một tập các tham số (nếu cần). Bạn có thể thử 'system' để gọi một dòng lệnh shell full-blown. – lurker