_fdopen _wfdopen
會將資料流關聯的低階 I/O 先前開啟的檔案。
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
參數
fd
開啟檔案的檔案描述項。mode
檔案存取的型別。
傳回值
每個函式傳回開啟資料流的指標。Null 指標值,表示發生錯誤。當發生錯誤時,不正確的參數處理常式會叫用,如所述參數驗證。若要繼續,請允許執行errno被設定為其中一個EBADF,表示錯誤的檔案描述項,或EINVAL,來表示, mode為空值的指標。
如需這些和其他錯誤碼的詳細資訊,請參閱 _doserrno、 errno、 _sys_errlist,以及 _sys_nerr。
備註
_fdopen函式會將 I/O 資料流關聯的檔案,由fd,並可以使用緩衝處理,並設定格式的低階 I/O 為開啟的檔案,因此。_wfdopen寬字元版本的_fdopen。 mode引數,以_wfdopen是一個寬字元字串。_wfdopen與_fdopen否則運作方式完全相同。
泛用文字常式對應
Tchar.h 常式 |
_UNICODE 和未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
mode字元字串指定的檔案和檔案存取類型。
字元字串mode指定的要求檔案的存取類型,如下列表格所示。
"r"
開啟進行讀取。如果檔案不存在或找不到, fopen呼叫失敗。"w"
開啟空白檔案進行寫入。如果指定的檔案存在,其內容已終結。"a"
會開啟以進行寫入,結尾的檔案 (附加)。如果不存在,請建立該檔案。"r+"
會開啟以進行讀取和寫入。(檔案必須存在)。"w+"
開啟空白檔案來讀取和寫入。如果指定的檔案存在,其內容已終結。"a+"
會開啟以進行讀取和附加。如果不存在,請建立該檔案。
與開啟檔案時"a"或"a+"存取型別,所有寫入作業就會發生在檔案結尾處。檔案指標可以藉由調整位置fseek或rewind,但就會永遠移回至檔案結尾之前任何寫入作業會執行。因此,不能覆寫現有的資料。當"r+", "w+",或"a+"的存取類型指定,則允許讀取和寫入 (檔案即為開啟,以供 「 更新 」)。不過,當您切換讀取及寫入時,必須有介入fflush, fsetpos, fseek,或rewind作業。您可以指定為目前的位置fsetpos或fseek如果您想要的作業。
除了上述的值,下列的字元也可以包含在mode來指定新行字元的轉譯模式。
t
在文字中的開啟 (轉譯) 模式。在此模式下,歸位字元-換 (CR-LF) 組合會轉譯成一行餵送 (LF) 上的輸入,然後 LF 字元會轉譯為在輸出的 CR LF 組合。此外,Ctrl + Z 組合鍵會解譯成輸入的檔案結尾字元。在 [檔案開啟進行讀取/寫入, fopen檢查 Ctrl + Z 結尾的檔案並移除它,如果可能的話。這是因為使用fseek和ftell函式,以 Ctrl + Z 組合鍵以結束檔案內移動,可能會導致fseek來執行檔案的結尾附近的錯誤。b
以二進位 (未轉譯的) 模式開啟。從任何轉譯t模式將被抑制。c
啟用相關聯的認可旗標filename ,讓檔案緩衝區的內容會直接寫入磁碟,如果其中一個fflush或_flushall呼叫。n
重新設定相關聯的認可旗標filename為"否-認可"這是預設值。如果您要連結您的程式與 Commode.obj,它也會覆蓋全域認可旗標。認可的全域旗標預設值是"否認可",除非您明確地連結您的程式與 Commode.obj。
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.不要使用它們若您想要保留 ANSI 可攜性。
如果t或b已不會列在mode,由全域變數定義的預設轉譯模式 _fmode。如果t或b引數、 函式失敗,且傳回有前置NULL。文字及二進位模式的說明,請參閱文字和二進位模式的檔案 I/O。
有效字元為mode中使用字串fopen和_fdopen會對應到oflag引數中使用 _ 開啟的和 _sopen、,如下所示。
在字元mode字串 |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
None |
n |
None |
需求
Function |
所需標頭 |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> 或者 <wchar.h> |
如需相容性資訊,請參閱相容性。
範例
// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>
int main( void )
{
FILE *stream;
int fd, count = 0;
char inbuf[128];
// Open a file.
if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
exit( 1 );
// Get stream from file descriptor.
if( (stream = _fdopen( fd, "r" )) == NULL )
exit( 1 );
while( fgets( inbuf, 128, stream ) != NULL )
count++;
// After _fdopen, close by using fclose, not _close.
fclose( stream );
printf( "Lines in file: %d\n", count );
}
輸入: crt_fdopen.txt
Line one
Line two
Output
Lines in file: 2
.NET Framework 對等用法
System::IO::FileStream::FileStream