コマンドライン(linux / unixコマンド)からユーザー入力を取得し、プログラム内で実行するプログラムを作成しています。
これまでの私のステップ:
- 入力したコマンドの数をユーザーに尋ねる
- 子プロセスを作成するためのFork()
- 子PIDと親PIDを出力します
- ユーザーが各コマンドを入力できるようにし、各入力をargvのインデックスに読み込みます
- execvを使用して、argv内で各コマンドを実行します
主な問題は、実行時にexecvコマンドの「bin /ls/」を実行するだけであるということです。
プログラムの実行からの出力例を次に示し
ます。コマンドの数を入力します。2
子のPIDは3487です。親のPIDは3485です
。UNIXコマンドを入力します。lsUNIXコマンドを入力します。-alCMDで「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);
}
}