Linux シェルをシミュレートする ac プログラムを作成しています。
リダイレクト記号、つまり > 記号を使用して I/O リダイレクトを実装するために、freopen を使用して stdout をユーザーが指定したファイルに置き換えます。コマンドが次の場合:
environ > bla.txt
私のシェルは、環境変数を stdout ではなく bla.txt ファイルに出力します。
ただし、「bla.txt」ファイルを作成する代わりに、作成されるファイルは「bla.txt?」です。
の背後にある謎を解ける人はいますか? ファイル名に追加?
I/O リダイレクトのみのコードは次のとおりです。
char *inFile;
pid_t pid;
int rc;
/* keep reading input until "quit" command or eof of redirected input */
while (!feof(stdin))
{
/* get command line from input */
if (fgets (buf, MAX_BUFFER, stdin )) // read a line
{
inFile = strstr(buf, ">"); // look for redirection arrow > in the command
if(inFile != NULL)
{
pid = fork();
if(pid == 0)
freopen( inFile+2, "w", stdout);
else if(pid == -1)
syserr("fork");
else
waitpid(pid,&rc,0);
}
}
}
解決策をグーグルで調べてみましたが、何も見つかりません。他のスタックオーバーフローの質問も調べてみましたが、答えが見つかりません。
ありがとう。