Я пытаюсь написать модульный тест, который проверяет некоторый код XML-анализа.Модульный тест создает дескриптор файла в XML-документе в памяти с помощью shm_open, а затем передает его в 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>
// ^
}