📄 cmds.c
字号:
setprompt(){ interactive = !interactive; printf("Interactive mode %s.\n", onoff(interactive));}/* * Toggle metacharacter interpretation * on local file names. *//*VARARGS*/setglob(){ doglob = !doglob; printf("Globbing %s.\n", onoff(doglob));}/* * Set debugging mode on/off and/or * set level of debugging. *//*VARARGS*/setdebug(argc, argv) char *argv[];{ int val; if (argc > 1) { val = atoi(argv[1]); if (val < 0) { printf("%s: bad debugging value.\n", argv[1]); return; } } else val = !debug; debug = val; printf("Debugging %s (debug=%d).\n", onoff(debug), debug);}/* * Set current working directory * on remote machine. */cd(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(remote-directory) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s remote-directory\n", argv[0]); return; } (void) docd(argv[1]);}/* * Set current working directory * on local machine. */lcd(argc, argv) char *argv[];{ char buf[MAXPATHLEN]; if (argc < 2) argc++, argv[1] = home; if (argc != 2) { printf("%s local-directory\n", argv[0]); return; } if (!globulize(&argv[1])) return; if (chdir(argv[1]) < 0) { perror(argv[1]); return; } printf("Local directory now %s\n", getwd(buf));}/* * Delete a single file. */delete(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(remote-file) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s remote-file\n", argv[0]); return; } (void) dodelete( argv[1]);}/* * Delete multiple files. */mdelete(argc, argv) char *argv[];{ char *cp; if (argc < 2) { strcat(line, " "); printf("(remote-files) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s remote-files\n", argv[0]); return; } while ((cp = remglob(argc, argv)) != NULL) if (confirm(argv[0], cp)) (void) dodelete( cp);}/* * Rename a remote file. */renamefile(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(from-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) {usage: printf("%s from-name to-name\n", argv[0]); return; } if (argc < 3) { strcat(line, " "); printf("(to-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 3) goto usage; dorename(argv[1], argv[2]);}/* * Copy a remote file. */copyfile(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(from-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) {usage: printf("%s from-name to-name\n", argv[0]); return; } if (argc < 3) { strcat(line, " "); printf("(to-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 3) goto usage; docopy("COPY", argv[1], argv[2]);}/* * Move a remote file. */movefile(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(from-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) {usage: printf("%s from-name to-name\n", argv[0]); return; } if (argc < 3) { strcat(line, " "); printf("(to-directory) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 3) goto usage; docopy("MOVE", argv[1], argv[2]);}/* * Get a directory listing * of remote files. */ls(argc, argv) char *argv[];{ char *cmd; if (argc < 2) argc++, argv[1] = "*"; if (argc < 3) argc++, argv[2] = "-"; if (argc > 3) { printf("usage: %s remote-directory local-file\n", argv[0]); return; } cmd = argv[0][0] == 'l' ? "NLST" : "LIST"; if (strcmp(argv[2], "-") && !globulize(&argv[2])) return; recvrequest(cmd, argv[2], argv[1], "w");}/* * Get a directory listing * of multiple remote files. */mls(argc, argv) char *argv[];{ char *cmd, *mode, *cp, *dest; if (argc < 2) { strcat(line, " "); printf("(remote-files) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 3) { strcat(line, " "); printf("(local-file) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 3) { printf("%s remote-files local-file\n", argv[0]); return; } dest = argv[argc - 1]; argv[argc - 1] = NULL; if (strcmp(dest, "-")) if (globulize(&dest) && confirm("local-file", dest)) return; cmd = argv[0][1] == 'l' ? "NLST" : "LIST"; for (mode = "w"; cp = remglob(argc, argv); mode = "a") if (confirm(argv[0], cp)) recvrequest(cmd, argv[2], argv[1], "w");}/* * Unify Accesslists for a single file. */unify(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(remote-directory) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s remote-directory\n", argv[0]); return; } (void) dounify( argv[1]);}/* * Do a shell escape */shell(argc, argv) char *argv[];{ int pid, status, (*old1)(), (*old2)(); char shellnam[40], *shell, *namep; char **cpp, **gargs; old1 = signal (SIGINT, SIG_IGN); old2 = signal (SIGQUIT, SIG_IGN); if ((pid = fork()) == 0) { for (pid = 3; pid < 20; pid++) close(pid); signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); if (argc <= 1) { shell = getenv("SHELL"); if (shell == NULL) shell = "/bin/sh"; namep = rindex(shell,'/'); if (namep == NULL) namep = shell; strcpy(shellnam,"-"); strcat(shellnam, ++namep); if (strcmp(namep, "sh") != 0) shellnam[0] = '+'; if (debug) { printf ("%s\n", shell); fflush (stdout); } execl(shell, shellnam, 0); perror(shell); exit(1); } cpp = &argv[1]; if (argc > 2) { if ((gargs = glob(cpp)) != NULL) cpp = gargs; if (globerr != NULL) { printf("%s\n", globerr); exit(1); } } if (debug) { register char **zip = cpp; printf("%s", *zip); while (*++zip != NULL) printf(" %s", *zip); printf("\n"); fflush(stdout); } execvp(argv[1], cpp); perror(argv[1]); exit(1); } if (pid > 0) while (wait(&status) != pid) ; signal(SIGINT, old1); signal(SIGQUIT, old2); if (pid == -1) perror("Try again later"); return (0);}/* * Send new user information (re-login) */user(argc, argv) int argc; char **argv;{ if (argc < 2) { login(0,0); } if (argc > 3) { printf("usage: %s username [password]\n", argv[0]); return (0); } login(argv[1], argv[2]); return (1);}/* * Print working directory. *//*VARARGS*/pwd(){ dopwd();}/* * Make a directory. */makedir(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(directory-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s directory-name\n", argv[0]); return; } domakedir(argv[1]);}/* * Remove a directory. */removedir(argc, argv) char *argv[];{ if (argc < 2) { strcat(line, " "); printf("(directory-name) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) { printf("%s directory-name\n", argv[0]); return; } doremovedir(argv[1]);}/* * Terminate session and exit. *//*VARARGS*/quit(){ disconnect(); exit(0);}/* * Terminate session, but don't exit. */disconnect(){ extern FILE *cout; extern int data; if (!connected) return; logout(); CourierClose(connected); connected = (CourierConnection *)0;}confirm(cmd, file) char *cmd, *file;{ char line[BUFSIZ]; if (!interactive) { if (verbose) printf("%s %s\n", cmd, file); return (1); } printf("%s %s? ", cmd, file); fflush(stdout); gets(line); return (*line != 'n' && *line != 'N');}fatal(msg) char *msg;{ fprintf(stderr, "ftp: %s\n"); exit(1);}/* * Glob a local file name specification with * the expectation of a single return value. * Can't control multiple values being expanded * from the expression, we return only the first. */globulize(cpp) char **cpp;{ char **globbed; if (!doglob) return (1); globbed = glob(*cpp); if (globerr != NULL) { printf("%s: %s\n", *cpp, globerr); if (globbed) blkfree(globbed); return (0); } if (globbed) { *cpp = *globbed++; /* don't waste too much memory */ if (*globbed) blkfree(globbed); } return (1);}whatis(argc, argv) int argc; char *argv[];{ FILE *fin, *fopen(); int type; char *typetostring(); if (argc < 2) { strcat(line, " "); printf("(local-file) "); gets(&line[strlen(line)]); makeargv(); argc = margc; argv = margv; } if (argc < 2) {usage: printf("%s local-file\n", argv[0]); return; } if ( access(argv[1], R_OK | F_OK ) == -1 ) { perror("file error: "); return; } type= get_type(argv[1]); printf("file %s is assumed to be %s\n", argv[1], typetostring(type));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -