2010-12-08 14 views
2

ファイルハンドルを扱う関数のために、Cで単体テストを書く必要があります。私はテストファイルの内容をユニットテストソースに直接入れたいと思います。したがって、私の質問:文字列を定義し、Cでファイルハンドルとしてアクセスすることは可能ですか? (ない求めているか、書き込み、またはのfcntlとかをやって)、またはのみ書き込み何あなただけ読んでテストしている、パイプを使用して、フォークでこれを実現するのは非常に可能である場合Cのファイルハンドルとしてのアクセス文字列

+0

Ryanの回答と私のコメントを参照してください。これらはPOSIXの正しい方法であり、C1xで標準化されています。 POSIX以外のシステムをサポートしなければならない場合、あなたは大したことはありません。 –

+0

POSIXはうまくいくでしょう、ありがとう! – Leo

答えて

6

fmemopenopen_memstreamを参照してください。

#define _GNU_SOURCE 
#include <stdio.h> 

FILE *fmemopen(void *buf, size_t size, const char *mode); 

FILE *open_memstream(char ** ptr, size_t *sizeloc); 
+2

'#define _GNU_SOURCE'を' #define _POSIX_C_SOURCE 200809L'に置き換えてください。これらは、2008年 'fmemopen'、ない' open_memstream'以来、標準のPOSIXインターフェイスです、あなたが欲しいものです。 –

+0

それはかなり甘い、聞いたことがない! – falstro

0

。私は窓でこれをやったことはありませんが、パイプとフォークの両方がPOSIXであるため可能であるはずです。

最初にパイプを作成してフォークし、子(または親)からパイプにテキストを書き込む必要があります。子でテストを実行すると、 、そしてあなたがテスト対象のコードに渡すパイプのread-fd。子プロセスは終了するまで書き込む必要があります(書き込むために複数の呼び出しが必要な場合があります)。またはパイプが閉じられています。テスト対象のコードが書いている場合は、パイプが閉じられるまで、子供はそうでない場合はテストコードが読み、または壊れたパイプに死ぬために誰かを待ってブロックするように、(複数回読み呼び出す必要があります)お読みください。

HTH。 Linux上で

関連する問題