linux系統下select和poll的實現機理

2021-08-31 19:51:14 字數 690 閱讀 6720

1.使用者層應用程式呼叫select()

2.核心層呼叫sys_select() ------> do_select()

最終呼叫檔案描述符fd對應的struct file型別變數的struct file_operations *f_op的poll函式。

poll指向的函式返回當前可否讀寫的資訊。

1)如果當前可讀寫,返回讀寫資訊。

2)如果當前不可讀寫,則阻塞程序,並等待驅動程式喚醒,重新呼叫poll函式,或超時返回。

do_select( ... )

if (retval || !__timeout || signal_pending(current))

break;

__timeout = schedule_timeout(__timeout); // 此處阻塞,等待驅動wake_up_interruptible

}current->state = task_running;

}3.驅動需要實現poll函式。

當驅動發現有資料可以讀寫時,通知核心層,核心層重新呼叫poll指向的函式查詢資訊。

例如:static unsigned int test_poll(struct file *file, poll_table * wait)

static void test_...(...)

static void test_init(...)

Linux下select 系統呼叫

一 select 函式功能 select系統呼叫允許程式同時在多個底層檔案表述符上,等待輸入的到達或輸出的完成。二 函式意義 乙個伺服器可以同時在多個開啟的套接字等待請求到來的方法而處理多個客戶。只是具體應用的其中之一 自己的理解,但凡是程式在執行過程中會遇到阻塞 不到條件發生就不往下執行 的情況,...

linux下select和epoll函式總結

多路io轉接伺服器實現的主旨思想是,不再由應用程式自己監視客戶端連線,取而代之由核心替應用程式監視檔案。select函式 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeou...

linux下select和poll的用法

select 函式的作用 系統呼叫select和poll的後端實現,用這兩個系統呼叫來查詢裝置是否可讀寫,或是否處於某種狀態。如果poll為空,則驅動裝置會被認為即可讀又可寫,返回值是乙個狀態掩碼 如何使用select 函式?select 函式的介面主要是建立在一種叫 fd set 型別的基礎上。它...