我對C非常陌生,並且在一個OS類中,我需要在C(yay)中編寫一個基本shell。它實際上已經走到半路,我只是在學習C基礎知識的同時完成這項工作。用execve在C中調用mkdir系統調用C
我想在分叉和調用之後使用exec,現在是mkdir。這些論點需要我通過一點點,但我一直在試圖弄清楚,希望有人能告訴我我出了什麼問題。
} else {
//fork exec
int pid = fork();
if (pid == 0) {
printf("%s",my_argv[0]);
execve("/bin/mkdir",my_argv,0);
} else wait(NULL);
}
這是我對mkdir調用作出響應的部分。現在,我有一個線[]這是從用戶輸入的命令採取
command = strtok(line, DELIMITERS);
的arg:
arg = strtok(0,DELIMITERS);
my_argv[0] = arg;
一切編譯罰款,但從來沒有的mkdir工作。打印my_argv [0]給出了我期望的正確參數。我敢肯定,這是愚蠢的,但任何提示將不勝感激。
全部代碼:
int main(int argc, char *argv[])
{
char *command;
char line[MAXLINE];
char *arg = NULL;
char *my_argv[];
while(1) {
printf(PROMPT);
if (fgets(line,MAXLINE,stdin) != NULL) {
//take out \n
line[strlen(line)-1] = '\0';
}
//looks for first delimiter, saves as the command
command = strtok(line, DELIMITERS);
//start looking at what command it is by comparing
if (strcmp(command,"cd")==0) {
//if they equal zero, they match
//this is a cd command, must have following arg
if (argv[1] == NULL) chdir("/");
else chdir(argv[1]);//chdir is the system call for cd
} else if (strcmp(command,"exit")==0) {
break;
} else if (strcmp(command,"mkdir")==0){
arg = strtok(0,DELIMITERS);
my_argv[0] = arg;
my_argv[1] = NULL;
if (!arg) {
printf("Usage: mkdir missing arg\n");
} else {
//fork exec
int pid = fork();
if (pid == 0) {
printf("%s",my_argv[0]);
//mkdir(arg);
execve("/bin/mkdir",my_argv,0);
} else wait(NULL);
}
}
}
return 0;
}
注意,有一個[ 'mkdir'功能](http://pubs.opengroup.org/onlinepubs/009695399/functions/mkdir.html)。你真的不必爲此執行完整的其他程序。 – cHao
是的,我希望它很容易 – dundermiff
有沒有理由不能使用'mkdir'函數,或者是作業的要求? –