메모리를 파일 디스크립터에 매핑 할 수 있기 때문에 파일 디스크립터가 필요한 기존의 일부 기능을 사용할 수 있습니다. 본질적으로 내가 원하는 것은 다음과 같습니다.메모리를 파일 디스크립터에 매핑하는 시스템 호출 (역방향 mmap)?
void do_operation1(int fd);
char data[DATA_MAX] = { /* embedded binary data */ };
int fd = addr_to_fd(data, DATA_MAX);
do_operation1(fd);
/* ... operate on fd ... */
어떤 시스템 호출 또는 호출을 사용하여이 작업을 수행 할 수 있습니까?
'FILE *'이'fmemopen '또는 그와 동등한 것에서'fileno()'가 리눅스/FreeBSD (그리고 다른 것들을 추측합니다)에서 실패한다는 것이 밝혀졌습니다. 파일 설명자를 얻을 수있는 방법이 없으면 해결책이 있는지 확신 할 수 없습니다. –
'fmemopen' 또한 BSD에서'funopen '을 사용하여 구현 될 수 있습니다. 하나의 구현은 https://redmine.openinfosecfoundation.org/attachments/105/0001-fmemopen-wrapper-added-fix-compilation-problems-on-m.patch –
에서 사용할 수 있습니다.'fork()'는 이 목적. 대신 스레드를 사용하는 것이 좋습니다. 파이프에서 읽기와 쓰기 사이의 다중화에'select() '를 사용하는 것이 더 좋을지 모르지만, 여기서는 옵션이 아닌 것 같습니다. – Sven