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