linux 中write下的原函数(基本原理)
来源:互联网 发布:java scanner读取char 编辑:程序博客网 时间:2024/06/06 21:00
和客户调用的write函数(是三个参数,加载驱动程序的时候是根据内核中的的文件图来进行加载的)
ssize_t sys_write(unsigned int fd, const char * buf, size_t count)
{
ssize_t ret;
struct file * file;
struct inode * inode;
ssize_t (*write)(struct file *, const char *, size_t, loff_t *); /* 指向
驱动程序中的wirte函数的指针*/
lock_kernel();
ret = -EBADF;
file = fget(fd); /* 通过文件描述符得到文件指针 */
if (!file)
goto bad_file;
if (!(file->f_mode & FMODE_WRITE))
goto out;
inode = file->f_dentry->d_inode; /* 得到inode信息 */
ret = locks_verify_area(FLOCK_VERIFY_WRITE, inode, file, file->f_pos,
count);
if (ret)
goto out;
ret = -EINVAL;
if (!file->f_op || !(write = file->f_op->write)) /* 将函数开始时声明的
write函数指针指向fops方法中对应的write函数 */
goto out;
down(&inode->i_sem);
ret = write(file, buf, count, &file->f_pos); /* 使用驱动程序中的write函数
将数据输入设备,注意看,这里就是四个参数了 */
up(&inode->i_sem);
out:
fput(file);
bad_file:
unlock_kernel();
return ret;
}
驱动程序:
int short_write (struct inode *inode, struct file *filp, const char *buf,
int count){
int retval = count;
extern unsigned char kbuf[10];
if(count>10)
count=10;
copy_from_user(kbuf, buf, count);
return retval;
}/* short_write */
设备short_t对应的fops方法是这样声明的:
struct file_operations short_fops = {
NULL, /* short_lseek */
short_read,
short_write,
NULL, /* short_readdir */
NULL, /* short_poll */
NULL, /* short_ioctl */
NULL, /* short_mmap */
short_open,
short_release,
NULL, /* short_fsync */
NULL, /* short_fasync */
/* nothing more, fill with NULLs */
};
内核中的文件图
- linux 中write下的原函数(基本原理)
- Linux下的read,write函数
- linux下的open()read()write()close()lseek()函数
- Linux 中write()函数的出错情况及处理
- Linux的write函数奥秘
- Linux下的聊天工具write
- linux下 open() write() read() close函数
- linux下zeromq write函数变更
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- linux下 open() write() read() close函数
- 网络编程(24)—— linux中write和read函数的阻塞试验
- 在linux中read、write函数
- java 打印图片
- android ViewPager 实现导航页面和广告播放
- 视频专辑:MYSQL优化视频教程
- extern 的用法
- C指针原理(18)-C指针基础
- linux 中write下的原函数(基本原理)
- 远程桌面使用感受
- hdu2242考研路茫茫——空调教室
- 在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件
- 视频专辑:轻松搞定网页设计(html+css+js)
- av_rescale_q、avcodec_get_frame_defaults2、av_set_parameters函数
- 一个月薪水
- zabbix 支持开机启动
- 视频专辑:PHP大型网站的核心技术之-memcached