いくつかの xml 解析コードをチェックする単体テストを作成しようとしています。単体テストでは、shm_open を使用してメモリ内の xml ドキュメントにファイル記述子を作成し、それを xmlTextReaderForFd() に渡します。しかし、その後の xmlTextReaderRead() で「ドキュメントの最後に余分なコンテンツがあります」というエラーが表示されます。解析コードは、実際のファイルから作成されたファイル記述子で正常に動作します (作成された shm_open とバイトごとの比較を行いましたが、まったく同じバイト セットです)。 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>
// ^
}