gpt4 book ai didi

c - 为什么我不能 mmap/proc/self/maps?

转载 作者:行者123 更新时间:2023-12-05 03:44:50 25 4
gpt4 key购买 nike

具体来说:为什么我可以这样做:

FILE *fp = fopen("/proc/self/maps", "r");
char buf[513]; buf[512] = NULL;
while(fgets(buf, 512, fp) > NULL) printf("%s", buf);

但不是这个:

int fd = open("/proc/self/maps", O_RDONLY);
struct stat s;
fstat(fd, &s); // st_size = 0 -> why?
char *file = mmap(0, s.st_size /*or any fixed size*/, PROT_READ, MAP_PRIVATE, fd, 0); // gives EINVAL for st_size (because 0) and ENODEV for any fixed block
write(1, file, st_size);

我知道/proc 文件不是真正的文件,但它似乎有一些为 FILE* 版本定义的大小和内容。它是在运行中 secret 生成它以供阅读之类的吗?我在这里缺少什么?

编辑:正如我可以清楚地从他们那里读取(),有没有办法获得可能的可用字节?还是我一直读到 EOF?

最佳答案

它们是在您阅读时即时创建的。也许这会有所帮助,这是一个展示如何实现 proc 文件的教程:

https://devarea.com/linux-kernel-development-creating-a-proc-file-and-interfacing-with-user-space/

tl;dr:你给它一个名字并读写处理程序,就是这样。从内核开发人员的角度来看,Proc 文件应该非常容易实现。不过,它们的行为不像功能齐全的文件。

至于奖金问题,似乎没有办法指示文件的大小,只有 EOF on reading。

关于c - 为什么我不能 mmap/proc/self/maps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66225418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com