execv("bin/less", para);
(元のコードに/
は. これは、プログラムがであり、 ではないことを前提としています。を使用して、プログラムの PATH ベースの検索を行うことさえできます。less
./bin/less
/bin/less
/usr/bin/less
execvp()
もう 1 つ問題があります。引数リストの末尾を示すために null ポインターを含める必要があります。
最後に、execv()
返品後にエラー メッセージを出力できます。返されたという事実だけで、失敗したことがわかります。
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
int pid;
if ((pid = fork()) != 0)
{
// read in from stdin and pass to pipe
// Need to test for fork() error here too
}
else
{
// read from pipe
// write to out.txt
// everything up to here works fine
char *para[] = { "/bin/less", "Desktop/out.txt", 0 };
execv(para[0], para);
fprintf(stderr, "Failed to execute %s\n", para[0]);
exit(1);
}
return 0;
}
または:
char *para[] = { "less", "Desktop/out.txt", 0 };
execvp(para[0], para);
fprintf(stderr, "Failed to execute %s\n", para[0]);
コメント以外にパイプの兆候がないため、パイプに関するコード内のコメントは不可解です。現状では、less
読み取るように指示されたファイルを読み取ります。less
出力が端末に送信されない場合、出力はページ分割されないことに注意してください。less
I/O リダイレクトが見られないので、プログラムが書き込もうとするものはすべて無視され、プログラムにデータが返されないと仮定する必要があります。