将char指针映射到具有文件描述符的内存文件
Map char pointer to in-memory file with file descriptor
我试图用fmemopen将char*映射到内存中的FILE*。我刚发现fmemopen不会给我一个文件描述符。有没有一种方法可以用FD获得内存中的FILE?
char * data = ... data ...;
FILE *fid = fmemopen(data, 172, "r");
int fd = fileno(fid);
if(fd < 0)
std::cout << "BAD" << std::endl;
else
std::cout << "GOOD" << std::endl;
看看shm_open()
和fdopen()
是否能满足您的需要。
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
FILE *f = NULL;
int fd = 0, n = 0;
char buffer[6] = "hello";
fd = shm_open("myfile", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if(fd<0) {
printf("failed to shm_openn");
exit(1);
}
f = fdopen(fd,"w+");
if(!f) {
printf("failed to fdopenn");
exit(1);
}
n = fwrite(buffer, sizeof(char), sizeof(buffer), f);
printf("wrote %d bytes", n);
fclose(f);
}
fopen
基于open
系统调用,因此具有相应的文件描述符。
另一边的fmemopen
是一个纯粹的库实现,不需要系统文件描述符。另请参阅fileno
的NOTES
部分。
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 许多文件描述符在调用sys_clone时
- AMQP-CPP >处理程序中的错误文件描述符
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 正在等待在非阻塞文件描述符上长时间运行ioctl
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 如何强制文件描述符缓冲我的输出
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- 将 select() 与非基于文件描述符的输入一起使用
- accept(..) 似乎正在修改我给它的文件描述符参数
- 使用 Select 多路复用未命名的管道和其他文件描述符
- 提升 ASIO 绑定:错误的文件描述符
- 使用文件描述符移动对象
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 我可以在不使用 FIOCANCEL 的情况下关闭 VxWorks 中的文件描述符吗?
- 将 Boost Asio 与 ZeroMQ 集成,文件描述符错误?