初次接觸select函式

2022-04-21 17:46:13 字數 1066 閱讀 4058

今天才開始研究select函式,最後乙個unix網路程式設計的作業了。下邊談談我對select函式的理解。

select函式及其所需型別被包含在中,此外,要使用它的最後乙個時間引數的話,還應當包含

0.select函式一般應當被包含在乙個無限迴圈中,如while(1)(有限迴圈也可以,但應該不太常這樣用)

1.呼叫select函式之前,需要先申明乙個fd_set型別的變數,這個變數用於記錄select函式所關注的檔案描述字;

2.申明fd_set變數之後,先對其初始化,也就是全部置零,fd_zero(fd_set變數位址);

3.然後將所關心的檔案描述字對應於fd_set變數的位置1,fd_set(檔案描述字,fd_set變數位址);(呼叫select函式之前要進行置位,否則select函式將無事可做,select呼叫之後也可以置位,這樣使得程式設計更加靈活)

4.呼叫select函式,此時程式將阻塞於此,直到系統產生「輸入」(第二個引數不為null)、「輸出」(第三個引數不為null)、「出錯訊號」(第四個引數不為null),或者時間引數所設定的時長超時(第五個引數不為null),select就會返回準備就緒的檔案描述字數目或0(超時返回),程式繼續執行。

5.接下來的程式中,若被操作的檔案描述字是之前呼叫fd_set設定過的,那麼就用乙個if(fd_isset(檔案描述字))來包裹對這個檔案描述字的相應操作,比如read操作,一般情況下這是乙個阻塞式的函式呼叫,但此時由於是在read所需資料已準備好的情況下呼叫它的,所以read一執行便返回了。

6.隨後,由於處於while(1)迴圈中,又回到了select函式的執行並阻塞起來。

select函式的用途總結:用於需對多個阻塞式的檔案操作函式進行呼叫,且這樣的操作不應當分先後順序的情形。如,單程序單執行緒伺服器對多客戶端,每個客戶端對應乙個檔案描述符,而對這些客戶端的讀操作是阻塞的,且不應當分先後順序的(若此時採用順序結構程式設計,當阻塞於等待 使用者a write的read操作,使用者b的write操作是不被接納的。),使用select函式,就可以無停頓地對各個使用者的請求進行處理了。

以上只是我今天看了select函式一節的理解,及時記錄下來,好記性不如爛筆頭嘛。作為初學者,難免會有理解錯誤的地方,歡迎指正。

初次接觸perl

今天貝在煩乙個程式,也為難他了,剛學perl不到兩天,就讓他寫程式完成功能,雖然現在他有很大的提高,但是也還是心裡沒底啊。第一次布置的任務,他說如果不完成還是挺不好的,呵呵,沒辦法,我就樂於助人,趕緊看了看perl的大概語法,變數迴圈等,然後找了相關的網頁看了看,還好,因為比較熟悉c語言,而且上過s...

初次接觸powershell

在linux下接觸shell後,發現shell的功能是如此的強大!window呢?同樣,學習了 nix的做法,實現了shell,稱為powershell,在我看來,這個名字取得不過份,它通過。net與shell的結合,提供了強大的平台操作功能,提供了與 nix的相同的命令的語法,令 nix的程式設計...

初次接觸VBS

隨便找了段vbs程式,分析語句on error resume next 使程式按照產生錯誤的語句之後的語句繼續執行,具體見 dim sourcepath dim numb dim應該是定義變數吧,猜得set初始化變數 sub filew 寫檔案 dim fso,myfile set fso crea...