`
helpbs
  • 浏览: 1162493 次
文章分类
社区版块
存档分类
最新评论

在内核中创建文件 filp_open/sys_open

 
阅读更多


之前以为在内核中不能创建文件,其实不是这样子的,只要文件系统跑起来之后就可以像在用户空间一样操作文件.
用户空间 内核
open()sys_open(), filp_open()
close() sys_close(), filp_close()
read() sys_read(), filp_read()
write() sys_write(), filp_write()
----------------------------------------------------
在内核模块中有时会用不了 sys_xxxx, 这时用 filp_xxxx 对应的函数就行了, 在模块中使用 sys_xxxx 还有问题, 还没有找到原因.
在 /tmp 中创建文件 aa
struct file *filep;
filep=filp_open("/tmp/aa",O_CREAT | O_RDWR,0);
if(IS_ERR(filep))
return -1;
filp_close(filep,0);
return 0;
========================================
sys_open 的使用方法:
#include <linux/fs.h>
......
u8Buff[50];
int fd;
memset(Buff, 0x00, sizeof(Buff));
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
fd = sys_open("/etc/Info", O_RDONLY, 0);
if(fd>=0)
{
sys_read(fd, Buff, 50);
printk("string: %s/n", Buff);
sys_close(fd);
}
set_fs(old_fs);
========================================
下面 open 使用的一些参数:
O_ACCMODE <0003>;: 读写文件操作时,用于取出flag的低2位。
O_RDONLY<00>;: 只读打开
O_WRONLY<01>;: 只写打开
O_RDWR<02>;: 读写打开
O_CREAT<0100>;: 文件不存在则创建,需要mode_t,not fcntl
O_EXCL<0200>;: 如果同时指定了O_CREAT,而文件已经存在,则出错, not fcntl
O_NOCTTY<0400>;: 如果pathname指终端设备,则不将此设备分配作为此进程的控制终端。not fcntl O_TRUNC<01000>;: 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。not fcntl
O_APPEND<02000>;: 每次写时都加到文件的尾端
O_NONBLOCK<04000>;: 如果p a t h n a m e指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
O_NDELAY;;
O_SYNC<010000>;: 使每次write都等到物理I/O操作完成。
FASYNC<020000>;: 兼容BSD的fcntl同步操作
O_DIRECT<040000>;: 直接磁盘操作标识
O_LARGEFILE<0100000>;: 大文件标识
O_DIRECTORY<0200000>;: 必须是目录
O_NOFOLLOW<0400000>;: 不获取连接文件
O_NOATIME<01000000>;: 暂无
当新创建一个文件时,需要指定mode 参数,以下说明的格式如宏定义名称<实际常数值>;: 描述。
S_IRWXU<00700>;:文件拥有者有读写执行权限
S_IRUSR (S_IREAD)<00400>;:文件拥有者仅有读权限
S_IWUSR (S_IWRITE)<00200>;:文件拥有者仅有写权限
S_IXUSR (S_IEXEC)<00100>;:文件拥有者仅有执行权限
S_IRWXG<00070>;:组用户有读写执行权限
S_IRGRP<00040>;:组用户仅有读权限
S_IWGRP<00020>;:组用户仅有写权限
S_IXGRP<00010>;:组用户仅有执行权限
S_IRWXO<00007>;:其他用户有读写执行权限
S_IROTH<00004>;:其他用户仅有读权限
S_IWOTH<00002>;:其他用户仅有写权限
S_IXOTH<00001>;:其他用户仅有执行权限
博主注:文件斜体部分必须加上,
否则读写文件时,返回值为-14(Bad Address)
分享到:
评论

相关推荐

    Linux内核中读写文件数据的方法

    在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明,...

    file结构体和inode结构体

    (1)struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个...在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。如下所示

    ARM_Linux启动分析.pdf

    这一部分的启动过程在2.4.x内核中简化了不少,缺省的独立初始化过程只剩下网络 (sock_init())和创建事件管理核心线程,而其他所需要的初始化都使用__initcall()宏 包含在do_initcalls()函数中启动执行。...

    flash_pages_filp·

    4、txt文件夹里存放lang.txt语言包文件,xml存放为主配置文件,pages文件夹存放每页书的源文件。 5、XML格式如下: &lt;page src="pages/page1.jpg"/&gt; &lt;page src="pages/page2.swf"/&gt; &lt;page src="pages/page3....

    Binder设备文件打开,映射,以内核缓冲区管理1

    因为进程调用open函数打开/dev/binder函数后,内核会返回个文件描述符给进程,而该文件描述符是与filp 所指向的打开文件结构体关联在起的,因此后以这

    pt7c4307 驱动

    static int rtc_open(struct inode *inode, struct file *file) { if (test_and_set_bit (1, &rtc_status)) return -EBUSY; rtc_irq_data = 0; return 0; } static int rtc_release(struct inode *inode, ...

    腾讯后台开发面试题及答案

    文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用; 而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有...

    pi_framework:框架

    使用:“ aura / sql”:“ ^ 2.4”,“ filp / whoops”:“ ^ 1.1” 去做: 要求 会议 验证服务 更多图书馆 路由器,应该更灵活 网站index.php-&gt; / var / www / pi_framework / public / site 管理员index....

    Filp powerpoint

    powerpoint转换成filppoint格式便于浏览,且占用空间量少

    verilog-d-filp-flop.rar_D_flip_flop_Flip Flop!_verilog

    Verilog code of D-Flip Flop

    嵌入式红绿灯控制系统

    该系统采用了以8051为内核的单片机芯片AT89s51作为核心控制器,以嵌入式操作系统RTX51为软件开发平台,通过控制城市十字路口的交通信号灯来指挥交通。该系统具有制作简单、成本低、功能实用等特点。 关键词:单片机...

    字符设备驱动

    教你怎样编写字符设备驱动。核心函数举例: ssize_t py_read(struct file *filp,char __user *buf,size_t...int py_open(struct inode *indop,struct file *filp) int py_close(struct inode *inodp,struct file *filp)

    linux内核字符设备驱动

    描述了字符设备驱动的执行过程以及原理,以及struct file的执行过程

    bgtools_unify_flip_normal_polygon_v12

    bgtools_unify_flip_normal_polygon_v12bgtools_unify_flip_normal_polygon_v12bgtools_unify_flip_normal_polygon_v12bgtools_unify_flip_normal_polygon_v12

    图片自动播放程序

    filp_v2系统,是练习c#控件的很好Demo案例。它包含了菜单、多窗口、图片框、复选框、容器等控件。 功能如下: 1:通过定时器完成自动翻转 2:设置毫秒值保存到xml数据中 3:文件夹对话框 4:文件对话框 5:...

    psdiff:Git hook 自动将 .PSD 文件渲染为图像,让您可以直观地区分更改

    差异 psdiff使用 git hooks 和可爱的库从存储库中的 PSD 自动生成最新的图像文件,让您轻松预览它们并使用 github 的图像差异工具。 [ ]( ) filp@filp-x ~ /dev/myproject&gt; $ git status# # masterA mock.psdfilp@...

    解析PHP函数array_flip()在重复数组元素删除中的作用

    我们都知道,PHP中的数组元素删除的方式可以有很多种,经常用到的函数有php中array_unique()。那么我们今天为大家介绍的PHP函数array_flip()在删除数组重复元素时的效率要比array_unique()函数高出大约5倍左右。PHP...

    nouveau_gem.rar_GEM

    reset filp so nouveau_bo_del_ttm() can test for it.

    jQuery的Filp翻牌效果

    NULL 博文链接:https://bdk82924.iteye.com/blog/1576470

    TextMap:urfu filp

    TextMap:urfu filp

Global site tag (gtag.js) - Google Analytics