用python读取/proc文件

用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

我试图将简单防火墙实现为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")

    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,它会包含一些数据