系統呼叫read()的返回錯誤場景

2021-09-10 05:04:44 字數 452 閱讀 3854

ssize_t read(int fd, void *buf, size_t count);

從檔案描述符fd中讀取count個位元組的資料放入buf的緩衝區中。

返回值:成功返回讀取到的位元組數;count為0,read()返回0;

eintr 在讀取到資料以前呼叫被訊號所中斷.

eagain 使用 o_nonblock 標誌指定了非阻塞式輸入輸出,但當前沒有資料可讀.

eio 輸入輸出錯誤.可能是正處於後台程序組程序試圖讀取其控制終端,但讀操作無效,或者被訊號sigttin所阻塞,或者其程序組是孤兒程序組.也可能執行的是讀磁碟或者磁帶機這樣的底層輸入輸出錯誤.

eisdir fd 指向乙個目錄.

ebadf fd 不是乙個合法的檔案描述符,或者不是為讀操作而開啟.

einval fd 所連線的物件不可讀.

efault buf 超出使用者可訪問的位址空間.

read 系統呼叫為什麼返回 int

read 是作業系統提供的乙個系統呼叫。該呼叫讀取流中的乙個位元組,返回乙個 int 這裡可以一 竟。早期的時候,作業系統設計者認為位元組大於等於0,故使用 1 作為流結尾標誌符。而且定義了乙個位元組就是乙個 byte,在記憶體中使用八位表示。這樣,乙個 byte 就只能表示0到127對應的編碼,顯...

Redis在高併發下常見的錯誤場景

第一種,看看自己是否已經入坑了。判斷redis快取是否有資料 if jedis.exists testlocklistv 1 else system.out.println jedis.get testlocklistv 1 快取有資料直接返回快取資料 很多同學都是判斷是否存在相同的key,如果不存...

從 read 看系統呼叫的耗時

1 fread和read有何不同?先看兩段 兩個檔案的功能完全一樣,開啟同乙個名為test.file的檔案,並逐字節地讀取整個檔案。將它們編譯後得到的可執行程式fread和read分別在同一臺pc linux系統 上執行,得到的如果如下 發現沒有?fread與read的耗時相差數十倍之多!可見啊 r...