【发布时间】:2019-03-06 13:35:20
【问题描述】:
我想将FILE* 文件(*.so 库)的内容复制到我将提供给其他函数的文件描述符中。我读过fileno(),但它似乎不能正常工作。
谁能给我一个技巧来做到这一点?
这是我的代码:
int takeFromDisk(char *file){
int shm_fd;
shm_fd = open_ramfs(); // Give me a file descriptor to memory
printf("[+] File Descriptor Shared Memory created!\n");
FILE *fichier = fopen(file, "r");
fclose(fichier);
return(shm_fd);
}
还有我用来获取文件描述符的函数:
int open_ramfs(void) {
int shm_fd;
//If we have a kernel < 3.17
// We need to use the less fancy way
if (kernel_version() == 0) {
shm_fd = shm_open(SHM_NAME, O_RDWR | O_CREAT, S_IRWXU);
if (shm_fd < 0) { //Something went wrong :(
fprintf(stderr, "[-] Could not open file descriptor\n");
exit(-1);
}
}
// If we have a kernel >= 3.17
// We can use the funky style
else {
shm_fd = memfd_create(SHM_NAME, 1);
if (shm_fd < 0) { //Something went wrong :(
fprintf(stderr, "[- Could not open file descriptor\n");
exit(-1);
}
}
return shm_fd;
}
我试过的代码:
int c;
while ((c = fgetc(fichier)) != EOF)
{
write(shm_fd, &c, sizeof(c));
}
【问题讨论】:
-
1) 可以使用 open() 代替 fopen() 直接获取 FD; 2)如果 fileno() “无法正常工作”,如果您共享您尝试过的代码以及结果是什么,这将有所帮助......
-
@JanKrüger 我想将变量 fichier 的内容复制到我使用 open_ramfs() 创建的文件描述符 shm_fd
-
你有没有尝试从
FILE *和write到文件描述符的fread? -
@coco:那你写的什么代码没用?
-
@coco 当然,有很多方法可以做到这一点,有些比其他方法更有效,但我的印象是你在设置基础知识时遇到了麻烦 - 如果是这样的话,有点更多详细信息会有所帮助-例如您尝试过的无效代码。在那之后,最简单(也是效率最低)的方法是循环两个
fread和write调用...
标签: c file shared-libraries