私はpipe、fork、dup2を使って "ls | more "または" ls |ソート "など 私はここで問題を理解することができません。私は私のプログラムを実行すると 、私はこのエラーを取得する:パイプ、フォーク、dup2に関する問題がある
./a.out
Missing filename ("less --help" for help)
は、なぜ私が「少ない」取得しています?
このコードで何が問題になっていますか?私が "more"を "ls"に再度変更すると、うまく動作します。私は、lsをやっているのと同じです。 ls。
#define STDIN 0
#define STDOUT 1
int main()
{
int fd[2];
int pid;
char *lschar[20]={"ls",NULL};
char *morechar[20]={"more",NULL};
pid = fork();
if (pid == 0) {
/* child */
int cpid;
cpid = fork();
if(cpid == 0) {
//printf("\n in ls \n");
pipe(fd);
dup2(fd[1], STDOUT);
close(fd[0]);
close (fd[1]);
execvp("ls",lschar);
} else if(cpid>0) {
waitpid(cpid, NULL,0);
dup2(fd[0],STDIN);
close(fd[0]);
close(fd[1]);
execvp("more", morechar);
}
} else if (pid > 0) {
/* Parent */
waitpid(pid, NULL,0);
}
return 0;
}
あなたのご協力をお待ちしております。
「なぜ「less」」と表示されるのですか? 'more'コマンドは、マシン上の' less'コマンドによって実装されるためです。 – smparkes
よろしいですか?しかし、なぜそのエラー?何か案が ?私はこのプログラムの問題は見ていない。試したgdbも成功しなかった。 – Vin
私はあなたが達成しようとしていることを100%確信しているわけではありませんが、引数なしで 'more' /' less'を呼び出しているのでエラーが発生しています。引数なしで 'ls'を実行できますが、' less'では実行できません。コマンドラインから試してみてください。それはあなたに同じエラーを与えるでしょう。 – smparkes