2016-11-30 83 views
1

C'S readPython的等價於C的讀取函數是什麼?

的read()函數將嘗試從與打開的文件描述符,fildes關聯的文件中讀取的字節nbyte,到緩衝區指向buf中。

成功完成後,這些函數將返回一個非負整數,指示字節的數目實際讀取。否則,函數應返回-1並設置errno來指示錯誤。

Python的read

閱讀從流最多n個字符。

從底層緩衝區讀取,直到我們有n個字符或我們命中EOF。 如果n爲負數或省略,請閱讀至EOF。

粗體字體是我的。基本上,如果當前可用的數據小於緩衝區大小,Python將堅持查找EOF ......如何使它簡單地返回任何可用的數據?

+0

它返回什麼是可用的,'file.read(1024)'將返回其中'N'是字符的最大可達1024數字你能很清楚與你所需要的可重複的例子'N'字符? –

+0

@RafaelBarros只有從非阻塞資源(如普通文件)讀取時纔是如此。當從套接字或管道讀取數據時,C的'read()'只會等待只有* some *數據可用,然後纔會返回數據。 Python的'file.read'將像C的'fread()'一樣嘗試返回所有請求的數據,除非遇到錯誤或EOF。 – user4815162342

+0

C語言中沒有'read'。你所引用的是你的操作系統提供的API手冊。這些API通常具有C的綁定,但幸運的是對於Python。你想看看'posix.read'或'os.read'。 –

回答

3

作者:「Python的read」我假定你的意思是方法的file對象。該方法更接近於C的fread:它實現了緩衝,並且它試圖滿足所請求的數量,除非由於IO錯誤或文件結束條件而不可能。

如果您確實需要調用許多C環境中可用的read()函數,則可以調用os.read()來調用基礎C函數。唯一的區別是它返回讀取的數據作爲字節字符串,並且在C函數返回-1時引發異常。

如果你打電話os.read(),記得給它使用fileno方法上的文件對象獲得,或者通過函數返回的文件描述符的os模塊如os.openos.pipe,等等。還記得不調用混合到os.open()file.open(),因爲後者會緩衝,並可能導致稍後調用os.open()不返回緩衝的數據。

+0

就是這樣。其實你只需要寫'os.read',而我理解其餘的。沒有足夠的睡眠讓一個人出現奇怪的問題。非常感謝你。 – Cyker

+0

順便說一句,'os.read'在Python 3中返回一個'bytes'(因爲它應該)。所以我會去用它。 – Cyker

+0

@Cyker謝謝,我現在糾正它說「字節字符串」,指Python 2中的'str'(一個字節字符串)和Python 3中的'bytes'。 – user4815162342

相關問題