static int do_cmd(int cmd, int argc, const char *argv[]) { switch (cmd) { case CMD_INTERACTIVE: case CMD_UNKNOWN: return cmd_loop(argc, argv); break; case CMD_CD: return cmd_cd(argv[0]); break; case CMD_PWD: return cmd_pwd(); break; case CMD_LS: return cmd_ls(argc, argv); break; case CMD_MKDIR: return cmd_mkdir(argc, argv); break; case CMD_LN: return cmd_ln(argc, argv); break; case CMD_RM: return cmd_rm(argc, argv); break; case CMD_MV: return cmd_mv(argc, argv); break; case CMD_CP: return cmd_cp(argc, argv); break; case CMD_CAT: return cmd_cat(argc, argv); break; case CMD_STAT: return cmd_stat(argc, argv); break; case CMD_QUIT: exit(EXIT_SUCCESS); break; default: return -1; break; } }
int read_cmd(int sock, char *cmd) { if (ft_strequ(cmd, "quit")) return (1); else if (ft_strequ(cmd, "pwd")) cmd_pwd(sock); else if (ft_strnequ(cmd, "ls", 2)) cmd_ls(sock); else if (ft_strnequ(cmd, "cd", 2)) cmd_cd(sock); else if (ft_strnequ(cmd, "get ", 4)) cmd_get(sock, cmd); else if (ft_strnequ(cmd, "put ", 4)) cmd_put(sock, cmd); else cmd_unknow(cmd); return (0); }
// 运行客户端 void run(char* ip, char* pt) { int sockfd = connectToHost(ip, pt); if (getReplyCode(sockfd) != SERVICE_READY) errorReport("Service Connect Error!"); while (userLogin(sockfd) != 0) // 调用登录函数userLogin printf("Please try again.\n"); int isQuit = 0; char buf[BUF_SIZE]; while (!isQuit) { printf("[Client command] "); fgets(buf, sizeof(buf), stdin); switch (cmdToNum(buf)) { case GET: cmd_get(sockfd, buf); break; case PUT: cmd_put(sockfd, buf); break; case PWD: cmd_pwd(sockfd); break; case DIR: cmd_dir(sockfd); break; case CD: cmd_cd(sockfd, buf); break; case HELP: cmd_help(); break; case QUIT: cmd_quit(sockfd); isQuit = 1; break; default: cmd_help(); break; } } close(sockfd); }
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); } } }
/* execute command */ EXPORT INT exec_cmd(B *cmd) { INT ac; B *av[N_ARGS]; ac = setup_param(cmd, av); if (ac < 1) return 0; if (strcmp(av[0], "date") == 0) { cmd_date(ac, av); } else if (strcmp(av[0], "attach") == 0) { cmd_attach(ac, av); } else if (strcmp(av[0], "detach") == 0) { cmd_detach(ac, av); } else if (strcmp(av[0], "mkdir") == 0) { cmd_mkdir(ac, av); } else if (strcmp(av[0], "rmdir") == 0) { cmd_rmdir(ac, av); } else if (strcmp(av[0], "pwd") == 0) { cmd_pwd(ac, av); } else if (strcmp(av[0], "cd") == 0) { cmd_cd(ac, av); } else if (strcmp(av[0], "rm") == 0) { cmd_rm(ac, av); } else if (strcmp(av[0], "mv") == 0) { cmd_mv(ac, av); } else if (strcmp(av[0], "ls") == 0) { cmd_ls(ac, av); } else if (strcmp(av[0], "tp") == 0 || strcmp(av[0], "tpx") == 0) { cmd_tp(ac, av); } else if (strcmp(av[0], "cp") == 0) { cmd_cp(ac, av); } else if (strcmp(av[0], "trunc") == 0) { cmd_trunc(ac, av); } else if (strcmp(av[0], "df") == 0) { cmd_df(ac, av); } else if (strcmp(av[0], "sync") == 0) { cmd_sync(ac, av); } else if (strcmp(av[0], "chmod") == 0) { cmd_chmod(ac, av); } else if (strcmp(av[0], "ref") == 0) { cmd_ref(ac, av); } else if (strcmp(av[0], "load") == 0) { cmd_load(ac, av); } else if (strcmp(av[0], "loadspg") == 0) { cmd_loadspg(ac, av); } else if (strcmp(av[0], "unload") == 0) { cmd_unload(ac, av); } else if (strcmp(av[0], "call") == 0) { cmd_call(ac, av); } else if (strncmp(av[0], "?", 1) == 0) { P("date [y m d [h m s]]\n"); P("attach devnm connm\n"); P("detach connm\n"); P("cd dir\n"); P("pwd \n"); P("ls [-t][-l][dir]\n"); P("mkdir dir [mode]\n"); P("rmdir dir\n"); P("rm path\n"); P("mv o-path n-path\n"); P("trunc path len\n"); P("df path\n"); P("sync [path [d]]\n"); P("chmod path mode\n"); P("tp path [ofs len]\n"); P("tpx path [ofs len]\n"); P("cp s-path d-path/dir [wofs [wlen]]\n"); P("ref [item]\n"); P("call addr [p1 p2 p3]\n"); P("load path\n"); P("loadspg path [arg ...]\n"); P("unload progid\n"); #ifdef NET_SAMPLE P("net execute network sample\n"); } else if (strcmp(av[0], "net") == 0) { IMPORT void net_test(void); net_test(); #endif } else { return 0; } return 1; }