2010-12-08 2 views
2

파일 핸들에서 작동하는 함수에 대해서는 C로 단위 테스트를 작성해야합니다. 테스트 파일의 내용을 유닛 테스트 소스에 직접 포함시키고 싶습니다. 따라서 내 질문 : 가능한 문자열을 정의하고 C에서 파일 핸들로 액세스 할 수 있습니까?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 년부터 표준 POSIX 인터페이스입니다.'open_memstream'이 아닌'fmemopen'이 여러분이 원하는 것입니다. –

+0

그건 꽤 달콤한, 그 들어 본 적이 없었어요! – falstro

0

테스트하려는 항목이 읽기 (쓰기 나 쓰기가 아니거나 fcntl 등)가 아니거나 글쓰기 만하는 경우 파이프를 사용하고 분기를 통해이를 실현할 수 있습니다. Windows에서이 작업을 해 본 적이 없지만 파이프와 포크가 모두 POSIX이므로 가능해야한다고 가정합니다.

먼저 파이프를 만든 다음 포크를 만들어 파이프에서 자식 (또는 부모)으로 텍스트를 쓰고 자식에서 테스트를 실행해야합니다. , 그리고 당신이 테스트중인 코드에 전달하는 파이프의 read-fd. 아이는 그것이 끝날 때까지 (글쓰기에 여러 번 전화를해야 할 때까지) 글을 쓰거나 파이프를 닫아야한다. 테스트중인 코드가 작성중인 경우, 파이프가 닫힐 때까지 (다른 코드를 한 번 이상 읽어야 할 수도 있음) 아이가 읽어야합니다. 그렇지 않으면 테스트 코드가 누군가가 읽거나 깨진 파이프에서 죽을 때까지 기다리는 것을 차단하게됩니다.

HTH.