C 言語ストリームのリダイレクトの 2 つの方法

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」。

おすすめ

転載: blog.csdn.net/g1093896295/article/details/79554448