int run_command(char* cmdline) { char* argv[BUFFER_SIZE]; int argc = tokenize(cmdline, argv); if (argc == 0) { return 0; } if (strcmp(argv[0], "wait") == 0) { return cmd_wait(argc, argv); } else if (strcmp(argv[0], "ls") == 0) { return cmd_ls(argc, argv); } else if (strcmp(argv[0], "cp") == 0) { return cmd_cp(argc, argv); } else if (strcmp(argv[0], "show") == 0) { return cmd_show(argc, argv); } else if (strcmp(argv[0], "rm") == 0) { return cmd_rm(argc, argv); } else if (strcmp(argv[0], "cmp") == 0) { return cmd_cmp(argc, argv); } else if (strcmp(argv[0], "echo") == 0) { return cmd_echo(argc, argv); } else if (strcmp(argv[0], "exit") == 0) { syscall_exit(0); return 1; // not reached } else { int k = strlen(argv[argc-1]); if (argv[argc-1][k-1] == '&') { argv[argc-1][k-1] = '\0'; return background_run(cmdline); } else { return cmd_run(cmdline); } } }
// 명령어 실행 void execute_cmdgrp(char *cmdgrp) { int count = 0; char* last_arg = NULL; int len = 0; count = makelist(cmdgrp, " \t", cmdvector, MAX_CMD_ARG); last_arg = cmdvector[count-1]; len = strlen(last_arg); if(len && last_arg[len-1] == '&') { last_arg[len-1] = '\0'; if(strlen(last_arg) == 0) cmdvector[count-1] = NULL; background_run(); } execvp(cmdvector[0], cmdvector); fatal("exec error"); }
int run_command(char* cmdline) { char* argv[BUFFER_SIZE]; int argc = tokenize(cmdline, argv); if (argc == 0) { return 0; } if (strcmp(argv[0], "wait") == 0) { return cmd_wait(argc, argv); } else if (strcmp(argv[0], "ls") == 0) { return cmd_ls(argc, argv); } else if (strcmp(argv[0], "cp") == 0) { return cmd_cp(argc, argv); } else if (strcmp(argv[0], "show") == 0) { return cmd_show(argc, argv); } else if (strcmp(argv[0], "rm") == 0) { return cmd_rm(argc, argv); } else if (strcmp(argv[0], "pwd") == 0) { return cmd_pwd(argc, argv); } else if (strcmp(argv[0], "cd") == 0) { return cmd_cd(argc, argv); } else if (strcmp(argv[0], "cmp") == 0) { return cmd_cmp(argc, argv); } else if (strcmp(argv[0], "echo") == 0) { return cmd_echo(argc, argv); } else if (strcmp(argv[0], "mkdir") == 0) { return cmd_mkdir(argc, argv); } else if (strcmp(argv[0], "rmdir") == 0) { return cmd_rmdir(argc, argv); } else { int k = strlen(argv[argc-1]); if (argv[argc-1][k-1] == '&') { argv[argc-1][k-1] = '\0'; return background_run(cmdline); } else { return cmd_run(cmdline); } } }