我正在尝试编写一个检查一些 xml 解析代码的单元测试。单元测试使用 shm_open 在内存中的 xml 文档上创建文件描述符,然后将其传递给 xmlTextReaderForFd()。但是我在随后的 xmlTextReaderRead() 上收到“文档末尾的额外内容”错误。解析代码在从实际文件创建的文件描述符上工作正常(我已经与创建的 shm_open 进行了逐字节比较,它是完全相同的一组字节。)为什么 libxml2 在创建的文件描述符上阻塞用 shm_open?
这是我的代码:
void unitTest() {
int fd = shm_open("/temporary", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
char *pText = "<?xml version=\"1.0\"?><foo></foo>";
write(fd, pText, strlen(pText) + 1);
lseek(fd, 0, SEEK_SET);
xmlTextReaderPtr pReader = xmlReaderForFd(
fd, // file descriptor
"/temporary", // base uri
NULL, // encoding
0); // options
int result = xmlTextReaderRead(pReader);
// result is -1
// Get this error at console:
// /temporary:1: parser error : Extra content at the end of the document
// <?xml version="1.0"?><foo></foo>
// ^
}