我可以在程序中更改文件权限吗?

时间:2016-08-17 18:01:52

标签: file permissions linux-kernel

在编写设备驱动程序时,我使用了device_create()函数,它在/ dev中创建了一个链接到通过fops注册的函数的文件。

问题是,一旦我修改了这个模块,我就无法fprintf写入/ dev文件。发生页面域错误。我仍然可以写入普通文件,所以我想我没有权限写入/ dev中的文件。在调用device_create()时,有什么办法可以将文件设置为内​​核模块中的可写文件,所以我不需要在外部设置它吗?

2 个答案:

答案 0 :(得分:1)

如果我读得正确,你有一个用户空间程序在自定义驱动程序支持的设备文件上执行fopen + fprintf。在使用时,内核崩溃。

首先,当应用于设备驱动程序时,使用FILE抽象(使用fopen和fprintf给出)非常粗略。由于它执行内部缓冲,因此您无法确定哪些数据实际上会触及驱动程序以及哪些数据块。直接使用标准文件描述符(打开+写入)。

现在,怀疑存在许可问题是不对的。如果到达驱动程序的打开例程,则内核已确定您具有必要的权限。同样,如果到达写例程,则文件已经打开,因此我们知道您有权使用它。但即使存在某种类型的权限问题,页面域错误也绝对无法让内核在响应中遇到。

考虑到问题的质量,我认为你对于使用这些东西进行编程太新了,并建议暂时坚持用户空间。

答案 1 :(得分:0)

查看内核对syscalls进行示例使用的init/initramfs.c。包括linux/syscalls.h,只需使用sys_chmod即可。它的工作方式类似于用户空间变体。这几乎可以应用于任何系统调用。(并不是在内核中使用socket是个好主意)