o_nonblock和o_ndelay
所產生的結果都是使i/o變成非擱置模式(non-blocking),在讀取不到資料或是寫入緩衝區已滿會馬上return,而不會擱置程式動作,直到有資料或寫入完成。
它們的差別在於設立o_ndelay
會使i/o函式馬上回傳0,但是又衍生出乙個問題,因為讀取到檔案結尾時所回傳的也是0,這樣無法得知是哪中情況;因此,o_nonblock就產生出來,它在讀取不到資料時會回傳-1,並且設定errno為eagain。
不過需要注意的是,在gnu c中o_ndelay
只是為了與bsd的程式相容,實際上是使用o_nonblock作為巨集定義,而且o_nonblock除了在ioctl中使用,還可以在open時設定。
如果沒有資料,那麼該呼叫將被阻塞.處於等待狀態,直到有字元輸入,
或者到了規定的時限和出現錯誤為止,
通過以下方法,能使read函式立即返回。
fcntl(fd,f_setfl,fndelay);
fndelay 函式使read函式在埠沒月字元存在的情況下,立刻返回0,
如果要恢復正常(阻塞)狀態,可以呼叫fcntl()函式,不要fndelay引數,
如下所示:
fcntl(fd,f_setfl,0);
在使用o_ndelay引數開啟序列口後,同樣與使用了該函式呼叫。
fcntl(fd,f_setfl,0);
O NONBLOCK與O NDELAY有何不同?
o nonblock和o ndelay所產生的結果都是使i o變成非擱置模式 non blocking 在讀取不到資料或是寫入緩衝區已滿會馬上return,而不會擱置程式動作,直到有資料或寫入完成。它們的差別在於設立o ndelay會使i o函式馬上回傳0,但是又衍生出乙個問題,因為讀取到檔案結尾時...
SQL與NoSQL MySQL與NoSQL的融合
寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...
指標與陣列 a與 a區別
假設宣告了乙個陣列a,則 a表示陣列a的首位址,a與 a 0 表示陣列a首元素的首位址,那麼 a 1與a 1有哪些區別呢?通過下面的實驗來說明。int i 0 int a 5 int p int a 1 for i 0 i 5 i printf a 0x p,a 0x p,a 1 0x p n a,...