Linux
我在哪裡可以找到有關古代 doshell(8) 的任何資訊?
我通過執行“man openvt”命令查看了 openvt 手冊,並在“SEE ALSO”部分下找到了 doshell(8):
但是,如果我執行“man 8 doshell”,則沒有手冊:
我在http://linux.about.com/library/cmd/blcmdl1_openvt.htm查看了線上手冊,**doshell(8)**不是連結:
我發現有人提到“(還有古老的 doshell(8)”,在https://stackoverflow.com/questions/21428158/how-to-send-broadcast-message-to-console-in-linux-from回答-c-程序
只是出於好奇的一個問題,有什麼地方可以找到有關 doshell(8) 的資訊嗎?
我不確定(已經有一段時間了),但在我看來這是對舊 Linux 常式(1992 年)的引用:ftp: //ftp2.de.freebsd.org/pub/linux/tsx-11/來源/usr.bin/doshell.c:
#include <stdio.h> #include <sys/file.h> #include <errno.h> extern char *sys_errlist[]; main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "usage: doshell <ttyname> <shellname> &\n"); exit(1); } /* close down fd's */ close(0); close(1); close(2); /* detach from parent process's group */ setsid(); /* open new tty */ if (open(argv[1], O_RDWR, 0) == -1) exit(2); dup(0); dup(0); execlp(argv[2], "-", 0); /* should appear on new tty...: */ fprintf(stderr, "can't exec shell: %s\n", sys_errlist[errno]); exit(3); }
它也可能指的是舊的 Minux 常式:http ://users.sosdg.org/~qiyong/mxr/source/commands/mail/mail.c#L702
void doshell(command) char *command; { int waitstat, pid; char *shell; if (NULL == (shell = getenv("SHELL"))) shell = SHELL; if ((pid = fork()) < 0) { perror("mail: couldn't fork"); return; } else if (pid != 0) { /* parent */ wait(&waitstat); return; } /* Child */ setgid(getgid()); setuid(getuid()); umask(oldmask); execl(shell, shell, "-c", command, (char *) NULL); fprintf(stderr, "can't exec shell\n"); exit(127); }
這兩個常式似乎都具有stackoverflow答案中描述的功能,而且第一個似乎不太可能從第二個派生。