일부 수학적 계산을 수행하는 C 라이브러리를 설계하고 있습니다. 직렬화 인터페이스를 지정하여 일부 데이터를 저장하고로드 할 수 있어야합니다. 질문은 라이브러리의 공용 API에서 FILE * 포인터를 사용하는 것이 올바른지 (바이너리 호환성 관점에서)?FILE의 이진 호환성 *
대상 platfoms은 다음과 같습니다
- 리눅스는 x86, GCC와 x86_64에> = 3.4.6
- 윈도우는 x86, x86_64에> = WINXP VS와> = 2008sp1 내가해야
가능한 한 많은 바이너리 호환이 가능하므로 현재 내 변형은 다음과 같습니다.
void SMModuleSave(SMModule* module, FILE* dest);
SMModule* SMModuleLoad(FILE* src);
그래서 나는 호기심이 많습니다. FILE *을 사용하거나 wchar */char *로 전환하는 것이 맞습니까?
필자는 파이썬과 MATLAB 스크립트 내부에서이 라이브러리를 사용할 수 있어야하므로 파일 설명자를 사용하기로 결정했습니다. 두 언어 모두 fd를 제공하지만 FILE은 제공하지 않습니다 *. 그래서 저는 fileno가 표준에 있지 않다는 사실에도 불구하고 그것을 사용하기로 결정했습니다. – prokher
또 다른 문제가 발생했습니다 : AFAIK 정적 C 런타임 (/ MT,/MTd 사용)으로 빌드 된 DLL의 API 인 경우 파일 설명자와 FILE * 둘 다 사용하는 것은 올바르지 않습니다 - [msdn-link] (http : /msdn.microsoft.com/en-us/library/ms235460%28v=vs.80%29.aspx). 나는 혼란 스럽다. API에서 파일 이름을 사용하고 싶지는 않습니다. 왜냐하면 파일 온 디스크에서만 사용을 제한하기 때문입니다. 반대로, fd 나 FILE *를 사용하면 스트림을 지정하는 가용성이 있지만 정적 CRT의 경우는 그렇지 않습니다. 나는 붙어있다. : – prokher