我想問一下,在c編程中,我們使用指針打開一個文件,同時使用多少個指針,我們可以打開同一個文件而不會出現任何錯誤?有限制嗎?也做序列事情像文件打開指針
f1= fopen("abc.txt",r)
f2= fopen("abc.txt",w)
做F2接近第一或F1可以接近第一太
我想問一下,在c編程中,我們使用指針打開一個文件,同時使用多少個指針,我們可以打開同一個文件而不會出現任何錯誤?有限制嗎?也做序列事情像文件打開指針
f1= fopen("abc.txt",r)
f2= fopen("abc.txt",w)
做F2接近第一或F1可以接近第一太
是的,大多數標準庫強加在一個特定的進程可以有多少個文件同時打開了一些限制。但是,只要你對事物處於半途而言的合理性,並且只有在你需要的時候打開文件,並且在完成時關閉它們,這很少是一個問題。
我們保證您可以同時打開至少FOPEN_MAX
文件。在某些情況下,您可以打開更多,但(如果沒有其他限制,例如操作系統缺少資源),您可以打開許多。
編輯:至於爲什麼你可以常開許多文件超過FOPEN_MAX
表示:這是很簡單的:爲保證,以打開N個文件的能力,你很可能需要預先分配所有你要的空間用於這些文件(例如,每個文件的緩衝區)。由於大多數程序無論如何都不會一次打開超過幾個文件,因此他們會盡量保持低於的數量,以防止在太空中浪費太多內存,而這些內存大多數都不會使用。
然後,爲了適應需要打開更多文件的程序,他們可以/將使用realloc(或類似的東西)來嘗試根據需要分配更多空間。由於realloc可能會失敗,但嘗試打開更多文件也可能失敗。
一個關於這個問題的問題:FOPEN_MAX在我的系統上是16,這令我感到驚訝,如此之低,當我剛纔嘗試時,我可能會打開1021個文件。爲什麼有這麼大的差距? – 2011-03-06 18:55:41
@Thomas Padron-McCarthy:查看編輯答案。 – 2011-03-06 19:17:49
自己嘗試一下,然後告訴我們。 – BlackBear 2011-03-06 18:24:04
如果有聲明等同於'靜態爲const char [R [] = 「R」;'和'靜態爲const char W [] = 「W」;' ,那麼你寫的會起作用。然而,大多數情況下,人們編寫'FILE * f1 = fopen(「abc.txt」,「r」);'等等。分號是強制性的。 (編譯器會比我更糟糕。) – 2011-03-06 18:49:15
您可以按照任意順序關閉文件流,而與打開它們的順序無關。但是,如果您有多個寫入文件流,並且將不同的數據寫入不同的流,則關閉這些流的順序可能會影響出現的數據。因此,標準I/O代碼將緩衝區刷新到磁盤的順序也是如此。有些系統可能會限制同時寫入單個文件的數量(比如每次只有一個文件) - 在我看來,Windows可以控制事物,以便一次只能修改一個文件。 – 2011-03-06 18:52:41