驱动程序与应用程序中函数调用关系分析(write)
2010-09-04 17:08
423 查看
驱动程序里的write函数有四个参数,函数格式如下:
short_write (struct inode *inode, struct file *filp, const char *buf, int count)
而用户程序中的write函数只有三个参数,函数格式如下:
write(inf fd, char *buf, int count)
那他们两个是怎么联系在一起的呢?这就要靠操作系统核心中的函数sys_write了,下面
是Linux Kernel 2.2.14中sys_write中的源代码:
asmlinkage 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;
short_write (struct inode *inode, struct file *filp, const char *buf, int count)
而用户程序中的write函数只有三个参数,函数格式如下:
write(inf fd, char *buf, int count)
那他们两个是怎么联系在一起的呢?这就要靠操作系统核心中的函数sys_write了,下面
是Linux Kernel 2.2.14中sys_write中的源代码:
asmlinkage 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;
相关文章推荐
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- 分析函数调用关系图(call graph)的几种方法
- 分析函数调用关系图(call graph)的几种方法
- 分析函数调用关系图(call graph)的几种方法
- 函数调用关系分析软件
- printf_系统调用过程分析_write() putc() 函数实现
- 分析函数调用关系图(call graph)的几种方法
- 使用egypt+graphviz分析ffplay的函数调用关系图
- 系统调用跟驱动程序中相应函数的参数对应关系
- 分析函数调用关系图(call graph)的几种方法
- 各类分析函数调用关系图的工具
- 【转】各类分析函数调用关系图的工具
- 分析函数调用关系图(call graph)的几种方法
- 分析函数调用关系图(call graph)的几种方法
- 各类分析函数调用关系图的工具
- 分析函数调用关系图(call graph)的几种方法
- printf_系统调用过程分析_write() putc() 函数实现
- 各类分析函数调用关系图的工具
- Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
- 分析函数调用关系图(call graph)的几种方法