execve関数の第一引数(パス)を標準入力から受け取りたい
Q&A
Closed
解決したいこと
閲覧ありがとうございます。
標準入力から実行ファイルのパスを受取り、その実行ファイルをexec系の関数で実行するというプログラムを考えています。
ただ、パス名の受取がうまく行っておらず、原因がわかる方がいればご教授いただければ幸いですm(_ _)m
該当するソースコード
static void exec(){
char PATH[256];
fgets(PATH,256,stdin);
char *args[] = {PATH,NULL,NULL};
execve(PATH,args,NULL);
err(EXIT_FAILURE,"execve() failed.");
}
実行時エラー
ファイルパス(例:/usr/bin/ps)を入力した後に以下のエラーが表示されます
a.out: execev() failed.: No such file or directory
コード全体
参考までにソースコードの全体を載せておきます。
sample.c
#include <stdio.h>
#include <err.h>
#include <stdlib.h>
#include <unistd.h>
static void exec(){
char PATH[256];
fgets(PATH,256,stdin);
char *args[] = {PATH,NULL,NULL};
execve(PATH,args,NULL);
err(EXIT_FAILURE,"execve() failed.");
}
void main(void){
while(1){
pid_t pid = fork();
if(pid < 0){
err(EXIT_FAILURE, "fork() failed.");
}else if(pid == 0){
exec();
}
}
}
0