驅動程式與應用程式中函式呼叫關係分析(write)

2021-09-30 06:03:15 字數 1399 閱讀 9109

驅動程式裡的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; 

驅動程式與應用程式之間的通訊

驅動程式與應用程式之間的通訊 驅動程式必須與應用程式進行通訊,才能最終達到應用程式控制裝置的目的,不然驅動有qiu用。要通訊就涉及到3個方面 1.應用程式與驅動程式通訊 2.驅動程式與應用程式通訊 3.資料傳輸 下面分別討論 1。應用程式與驅動程式通訊 2。驅動程式與應用程式通訊 2 1 驅動程式在...

驅動原理 應用程式訪問驅動程式

以read為例 read是乙個系統呼叫,系統呼叫之前在應用程式當中 或者叫使用者空間當中 read的實現 在核心中,read是如何找到核心的實現 呢?filename read mem.c include include include include intmain 這個應用程式就是開啟字元裝置檔...

驅動程式和應用程式通訊方法

驅動程式必須與應用程式進行通訊,才能最終達到應用程式控制裝置的目的,不然驅動有qiu用。要通訊就涉及到3個方面 1.應用程式與驅動程式通訊 2.驅動程式與應用程式通訊 3.資料傳輸 下面分別討論 1。應用程式與驅動程式通訊 1 1 應用程式實現與驅動通訊的過程 用createfile開啟裝置,用de...