用python读取/proc文件
我试图将简单防火墙实现为linux内核模块,它使用procfs与用户空间应用程序(用python编写)通信。除了从/proc/file读取之外,其他一切都正常 这是我在客户机上执行的代码:用python读取/proc文件,python,linux-kernel,kernel-module,Python,Linux Kernel,Kernel Module,我试图将简单防火墙实现为linux内核模块,它使用procfs与用户空间应用程序(用python编写)通信。除了从/proc/file读取之外,其他一切都正常 这是我在客户机上执行的代码: if os.path.isfile(PROCFS_PATH) and os.access(PROCFS_PATH,os.R_OK): myfile = open(PROCFS_PATH,'r') for line in myfile: print line.rstrip("\n
if os.path.isfile(PROCFS_PATH) and os.access(PROCFS_PATH,os.R_OK):
myfile = open(PROCFS_PATH,'r')
for line in myfile:
print line.rstrip("\n")
myfile.close()
这只是一个简单的印刷品
这是来自内核模块的proc readfile:
static ssize_t procRead(struct file *fp, char *buffer, size_t len, loff_t *offset){
static int finished = 0;
if(finished)
{
printk(KERN_INFO "proc read finished. Read: %s\n", buffer);
finished = 0;
return 0;
}
finished = 1;
if(copy_to_user(buffer, buf, procBuffSize))
return -EFAULT;
printk(KERN_INFO "read %lu bytes\n", procBuffSize);
return procBuffSize;
}
我猜,这应该没问题,但问题是我的客户在尝试阅读时会有记忆错误。在moment/proc/file中包含包含20个字符的简单防火墙规则,因此文件大小不会有问题。是什么 您能从控制台对该文件进行cat吗?它显示正确的格式吗?使用与Python程序相同的用户/权限?procfs上的文件大小是多少?无论如何,在procfs代码中使用更安全。使用静态“finished”标志不是一个好主意:在这种情况下,这会显示错误的行为,例如,当文件逐字节读取时从缓冲区(缓冲区、len、偏移量、buf、procBuffSize)返回简单的“读取”;'是“procRead”函数的最简单实现,请尝试使用它重写代码。@Olaf是的,我可以对文件进行cat,以正确的格式显示文件内容format@myautls-l返回文件大小实际上为0。。。这很奇怪,因为如果我对文件进行cat,它会包含一些数据