저는 C에서 매우 새롭고 C (기본)에서 기본 셸을 작성해야하는 OS 클래스에 있습니다. 실제로 실제로 중도에가는 중입니다. 저는 작업을 진행하는 동안 C 기본 사항을 배우려고합니다.C에서 execve를 사용하여 mkdir syscall을 호출하십시오.
포크 후에 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 = 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' 함수를 사용할 수없는 이유가 있을까요, 아니면 그 과제의 요구 사항입니까? –