1. コンソール コマンドを使用します (Windows を例にします)
コード:
#include<stdio.h>
int main()
{
char c;
while((c = getchar())!=EOF && c!='\n')
{
putchar(c);
}
return 0;
}
では、コンソールリダイレクトを使用するにはどうすればよいでしょうか? コンソールの実行中のスクリーンショットをご覧ください。
標準出力ストリームを出力ストリーム名のストリームにリダイレクトするには、プログラムの後に > 出力ストリーム名を追加します。標準入力ストリームを入力ストリーム名のストリームにリダイレクトするには、< 入力ストリーム名を追加します。
実行結果のスクリーンショット
制限事項: リダイレクトできるのは標準の入力ストリームと出力ストリームのみです。また、開くことができるファイル ストリームはそれぞれ 1 つだけです。
2. freopen を使用してリダイレクトし、ライブラリ関数を開きます
コード:
#include<stdio.h>
int main(void)
{
char c;
if(freopen("stdin.txt","r",stdin) == NULL) //将标准输入流重定向至stdin.txt流
{
fprintf(stderr,"打开文件失败!");
exit(-1);
}
if(freopen("stdout.txt","w",stdout) == NULL)//标准输出流重定向至stdout.txt流
{
fprintf(stderr,"打开文件失败!");
exit(-1);
}
while((c = getchar())!=EOF && c!='\n')
{
putchar(c);
}
return 0;
}
実行結果のスクリーンショット
freopen は、入力ストリームと出力ストリームをリダイレクトするために使用されます。この関数は、コードの元の外観を変更せずに入力および出力環境を変更できますが、使用時にはストリームが信頼できる必要があります。コンソール コマンドと比較して柔軟性が高く、ストリームを開くモード (「r」読み取り専用モードなど) を指定できます。
C89 関数宣言: FILE *freopen( const char *filename, const char *mode, FILE *stream );
C99関数付録:FILE *freopen(const char * ファイル名を制限, const char * モードを制限, FILE * ストリームを制限);
正式なパラメータの説明:
filename: リダイレクト先のファイル名またはファイル パス。mode: ファイルのアクセス許可を表す文字列。たとえば、「r」は「読み取り専用アクセス」を意味し、「w」は「書き込み専用アクセス」を意味し、「a」は「追加書き込み」を意味します。
stream: リダイレクトされるファイル ストリーム。
戻り値: 成功した場合は出力ストリームを指すファイル ポインタを返し、それ以外の場合は NULL を返します。
標準出力 stdout が指定されたファイルにリダイレクトされる場合、それを元の「デフォルト」出力デバイス (つまり、ディスプレイ) にリダイレクトするにはどうすればよいですか?
C 標準ライブラリの応答は「サポートされていません」です。元の出力ストリームを復元する方法はありません。
特定のプラットフォームに依存する実装はありますか? 存在。
オペレーティングシステムでは、コマンドラインコンソール(つまりキーボードやモニター)をファイルとして扱い、ファイルなので「ファイル名」を持ちます。歴史的な理由により、DOS オペレーティング システムと Windows オペレーティング システムではコマンド ライン コンソール ファイルのファイル名は「CON」ですが、他のオペレーティング システム (Unix、Linux、Mac OS X、Android など) ではファイル名が「CON」になります。 )「/dev/tty」。