一个常规的C程序,一个shell程序的实现,它使用标准输入来获取命令并执行它们,其中main()被声明为:int main(int argc,char * argv []),正常工作。 它是一个小型shell程序,它打印一个提示并在循环中等待用户输入,并执行输入的命令。但是,我想在调用时使命令行参数不可见,如下所示:
这适用于' ps -ef'现在显示没有显示命令行参数的命令运行。 但是,程序现在表现不同,并且不等待用户输入,而是保持打印提示。甚至Ctrl-C也不再起作用了。
但是,如果我将该程序称为:
$ echo quit | ./newprog
命令'退出'执行(导致程序退出),因此程序在重定向stdin时仍然有效,但在交互模式下不起作用。
在新程序下面,它自己和子程序中使用保存的命令行参数调用旧主程序。
/* newprog.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_NARGS 40
extern int old_main(int nargc, char *nargv[]);
int main(int argc, char *argv[])
{
int i; pid_t pid;
int nargc=argc;
char *nargv[];
nargv[0]=argv[0];
for (i = 1; i < argc; i++)
{
nargv[i]=strdup(argv[i]);
memset(argv[i],0,strlen(argv[i]));
}
nargv[i]=NULL;
pid=fork();
if (pid == 0) return old_main(nargc, nargv); /* child calls old_main() */
else if (pid == -1) printf("error: fork()\n");
exit(0); /* exit parent */
}