2009年04月22日

system 関数の結果をファイルに保存する

ふりっつさんの所の記事system()関数でリダイレクトを利用するをみて
リダイレクトしないでファイルに出力する方法。
要するに、ファイル記述子を切り替える処理。(エラー処理は省略)
(リダイレクトした方が簡単やな)

#include <stdio.h>
#include <stdlib.h>
#include <io.h>

int main(void){
	int ret;
	char wait;
	FILE *fp;
	int  stdout_bk;//is fd for stdout backup

	stdout_bk = dup(fileno(stdout));
	fp=fopen("log.txt","w");
	dup2(fileno(fp), fileno(stdout));
	ret = system("dir");
	if(ret != 0){
		printf("Command Error\n");
	}
	flushall();
	fclose(fp);

	dup2(stdout_bk, fileno(stdout));//restore

	printf("終了するには何かキーを押して下さい。\n");
	scanf("%c", &wait);

	return 0;
}

bcc32(Borland, CodeGear) で実行テストしました。
gcc の場合は、
flushall(); を fflush(stdout); にして下さい。
cl (Visual C)の場合は、
dup, dup2, flushall, fileno を _dup, _dup2, _flushall, _fileno にして下さい。(そのままでもコンパイル&動作しますが、MSDNにそう書いてある・)
Posted by BLUEPIXY at 04:19│Comments(0)TrackBack(0)C言語Q&A |

pre表示(Firefox)

コメントする

名前
 
  絵文字