-2

ユーザーが入力したファイル ( 経由stdin) が存在するかどうかをチェックする関数を C で書くのに苦労しています。たとえば、プログラムが として実行されて./a.out <myfile.txtいる場合、このファイルが存在しない場合は false を返すようにします。ファイルを引数として渡すことでこれを行うことができます (つまり./a.out myfile.txt)using を使用fopen()しますが、「stdin」を使用してこれを行う方法がわかりません (つまり./a.out <myfile.txt)

明確にするために:

より大きなプログラムは、テキスト ファイルの内容を取得し、それに対してアクションを実行することになっています。このプログラムは、コマンド ラインで として実行する必要があります./a.out arg1 arg2 <myfile.txt./a.out arg1 arg2ユーザーがorとしてプログラムを実行した場合./a.out(つまり、アクションを実行するファイルを指定していない場合)、ユーザーにファイルを含めるように求めます (<引数として渡されずに stdin を使用)。

4

5 に答える 5

3

Stdin は、ファイルからまったく来ていない可能性があります。たとえそうであっても、ユーザーがコマンド ラインで「< myfile.txt」と入力すると、シェルはコマンドのその部分を飲み込み、決してプログラムに渡しません。プログラムに関する限り、それはファイル、デバイス、端末、パイプ、またはその他のものからの匿名のバイト ストリームです。これらのどれを持っているかを照会することは可能ですが、それがファイルであることがわかっていても、コマンドラインで指定されたファイルの名前は取得されず、inode のみが取得されます。

于 2013-05-18T06:07:08.803 に答える
2

シェルはリダイレクトのためにファイルを開く責任があるため、ファイルが開かれない場合、シェルはコマンドの実行を拒否します。

于 2013-05-18T06:04:07.733 に答える