我有以下函数(来自 lionet asn1 编译器 API):
int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr);
第一个参数是 FILE*,这是输出的地方。
这个有效:
xer_fprint(stdout, &asn_struct, obj);
还有这个:
FILE* f = fopen("test.xml", "w");
xer_fprint(f, &asn_struct, obj);
fclose(f);
但我需要一个字符串中的数据(最好是 std::string)。
我该怎么做?
在 Linux 上,您有 fmemopen
,它创建一个 FILE *
句柄到临时内存缓冲区:
char * buffer = malloc(buf_size);
FILE * bufp = fmemopen(buffer, buf_size, "wb");
如果这不可用,那么您可以尝试将 FILE *
附加到 POSIX 共享内存文件描述符:
int fd = shm_open("my_temp_name", O_RDWR | O_CREAT | O_EXCL, 0);
// unlink it
shm_unlink("my_temp_name");
// on Linux this is equivalent to
fd = open("/dev/shm/my_temp_name", O_RDWR | O_CREAT | O_EXCL); unlink("/dev/shm/my_temp_name");
FILE * shmp = fdopen(fd, "wb");
// use it
char * buffer = mmap(NULL, size_of_buf , PROT_READ, MAP_SHARED, fd, 0);