阅读:1364回复:2
请教问题,驱动写文件方式使用函数不同用法.
在驱动程序中使用 sys_write和使用task_struct->files->fd[fd]->f_op->write有什么不一样?
|
|
沙发#
发布于:2002-12-13 09:44
for sys_write:
asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count) { ssize_t ret; struct file * file; ret = -EBADF; file = fget(fd); if (file) { if (file->f_mode & FMODE_WRITE) { struct inode *inode = file->f_dentry->d_inode; ret = locks_verify_area(FLOCK_VERIFY_WRITE, inode, file, file->f_pos, count); if (!ret) { ssize_t (*write)(struct file *, const char *, size_t, loff_t *); ret = -EINVAL; if (file->f_op && (write = file->f_op->write) != NULL) ret = write(file, buf, count, &file->f_pos); } } if (ret > 0) dnotify_parent(file->f_dentry, DN_MODIFY); fput(file); } return ret; } At above, ret=write(), that write is your task_struct->files->fd[fd]->f_op->write. Best regards. ________________________________________________________ 这是源码sys_write函数定义 我看过,但我想问和任务队列中write有什么不一样 |
|
板凳#
发布于:2002-12-12 12:47
在驱动程序中使用 sys_write和使用task_struct->files->fd[fd]->f_op->write有什么不一样? sys_write is the same as you use write in userspace. fd=sys_open(filename, mode, flag); len=sys_write(fd, buf, size); sys_close(fd); corresponding to: fd=open(); len=write(fd,); close(fd); for sys_write: asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count) { ssize_t ret; struct file * file; ret = -EBADF; file = fget(fd); if (file) { if (file->f_mode & FMODE_WRITE) { struct inode *inode = file->f_dentry->d_inode; ret = locks_verify_area(FLOCK_VERIFY_WRITE, inode, file, file->f_pos, count); if (!ret) { ssize_t (*write)(struct file *, const char *, size_t, loff_t *); ret = -EINVAL; if (file->f_op && (write = file->f_op->write) != NULL) ret = write(file, buf, count, &file->f_pos); } } if (ret > 0) dnotify_parent(file->f_dentry, DN_MODIFY); fput(file); } return ret; } At above, ret=write(), that write is your task_struct->files->fd[fd]->f_op->write. Best regards. |
|
|