さて、私は C を使用して Linux 用のシェルを作成しようとしています。関数 fork() と execl() を使用して、各コマンドを実行できますが、引数を読み取ろうとして立ち往生しています。
char * command;
char ** c_args = NULL;
bytes_read = getline (&command, &nbytes, stdin);
command = strtok(command, "\n ");
int arg = 0;
c_arg = strtok(NULL, "\n ");
while( c_arg != NULL ) {
if( c_args == NULL ) {
c_args = (char**) malloc(sizeof(char*));
}
else {
c_args = (char**) realloc( c_args, sizeof(char*) * (arg + 1) );
}
c_args[arg] = (char*) malloc( sizeof(char)*1024 );
strcpy( c_args[arg], c_arg );
c_arg = strtok(NULL, "\n ");
arg++;
}
...
pid_t pid = fork()
...
...
execl( <path>, command, c_args, NULL)
...
...
そうすれば、引数を渡そうとすると、コマンドからエラーが発生します。次に例を示します。
ls -l
私に与えます:
ls: cannot access p��: No such file or directory
問題は c_args の割り当てであることはわかっています。どうしたの?
乾杯。