python - 读取没有 EOF 标志的文件

标签 python c linux-kernel

如果这个文件有点像缓冲区,是否有一些聪明的方法可以按行读取文件内容(在Python中)?

更具体地说,我正在实现简单的防火墙作为内核模块,它通过 procfs 与用户空间应用程序进行通信。当用户空间应用程序请求打印所有防火墙规则时,将调用 procf_read 函数,并将所有规则存储在缓冲区中,然后将其复制到用户(copy_to_user func)。如果我使用简单的 for 循环按行读取文件,它会循环遍历文件并打印行就好(假设有 3 个行),但然后它会一遍又一遍地循环打印相同的行,直到读取整个缓冲区(我的猜测)。我想理想地只打印这 3 行,而不在文件末尾插入额外的符号来模拟“EOF”,然后在用户空间(python)中检测它。我正在考虑按字节读取文件,但如何获取以 C 的 fread() 方式读取的字节数?

最佳答案

文件从不包含EOF ,它不是一个角色,所以无法做你想做的事,因为它没有意义。

当您读取文件时,库会用 EOF 标记文件句柄。当它尝试读取超过文件末尾时,之后调用 feof(file)将返回一个非零值。但没有从文件中读取到 EOF 的字符。字符,如果有那么你如何能够将这个特定值存储在文件中?

参见this了解更多信息。

您可以构建以下解决方案

size_t fileSize;

fseek(file, 0L, SEEK_END);
fileSize = ftell(file);
fseek(file, 0L, SEEK_SET);

现在你知道要传递什么给 fread() .

关于python - 读取没有 EOF 标志的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955458/

相关文章:

python - 如果列表尚未包含所述字符串,则将字符串添加到嵌套的字符串列表

python - 迭代数据框中的某些列

python - Django 评论审核错误 : AlreadyModerated at/

c - 从终端中的执行行输入c

c中的子进程信号处理

c - 如何将字符串转换为C语言源代码

linux-kernel - 在 schedule() 之后恢复线程

python - 使用 python 将压缩的 SQL 转储导入 Postgresql

linux - 检查挂起后恢复系统的Linux内核中断

c++ - 无法解释的 Linux System V IPC 共享内存段标记为销毁