我正在编写一个程序来从命令行(linux/unix 命令)获取用户输入,并在我的程序中执行它们。
到目前为止我的步骤:
- 询问用户输入的命令数
- fork() 创建子进程
- 输出子 PID 和父 PID
- 允许用户输入每个命令,将每个输入读入 argv 的索引
- 使用 execv 在 argv 中运行每个命令
主要问题是当它执行时,它只是执行 execv 命令中的“bin/ls/”。
这是运行我的程序的示例输出:
输入命令数:2
孩子的 PID 是 3487。父母的 PID 是 3485
输入 UNIX 命令:ls
输入 UNIX 命令:-al
文件列表,就像在 CMD 上键入“LS”一样LINE
处理完成。
这是我的源代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
void main(int argc, char *argv[20])
{
int pid;
int num = 0;
printf("Enter number of commands: ");
scanf("%d", &argc);
pid = fork();
if(pid == 0)
{
printf("Child's PID is %d. Parent's PID is %d\n", (int)getpid(), (int)getppid());
for(num=0; num < argc; num++)
{
printf("Enter a UNIX command: ");
scanf("%s", argv[num]);
}
argv[num+1] = 0;
execv("bin/ls/", argv);
}
else
{
wait(pid);
printf("Process Complete.\n");
exit(0);
}
}