Linux

我在哪裡可以找到有關古代 doshell(8) 的任何資訊?

  • April 21, 2014

我通過執行“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答案中描述的功能,而且第一個似乎不太可能從第二個派生。

引用自:https://unix.stackexchange.com/questions/125740