_sopen_s _wsopen_s
開啟共用的檔案。 這些是 _sopen 和 _wsopen 安全性增強的版本,如 安全性功能,則在 CRT 中 所述。
errno_t _sopen_s(
int* pfh,
const char *filename,
int oflag,
int shflag,
int pmode
);
errno_t _wsopen_s(
int* pfh,
const wchar_t *filename,
int oflag,
int shflag,
int pmode,
);
參數
[out] pfh
在錯誤的狀況下,檔案處理式或 -1 。[in] filename
檔案名稱[in] oflag
允許的運算種類。[in] shflag
允許的共用種類。[in] pmode
使用權限設定。
傳回值
非零值表示發生錯誤,此時 errno 會被設置為以下一種數值。
EACCES
給定路徑是一個資料夾,或者檔案是唯讀的,但嘗試使用了開啟並寫入的運算。EEXIST
旗標 _O_CREAT 和 _O_EXCL 已被指定,但 filename 已經存在。EINVAL
無效的 oflag 、 shflag 或 pmode 參數,或 pfh 或 filename 是空指標。EMFILE
沒有可用的檔案描述。ENOENT
找不到檔案或路徑。
如果傳給函式無效的參數,無效參數處理常式將被叫用,如 參數驗證 所述。 如果允許繼續執行, errno 會設為 EINVAL ,並回傳 EINVAL 。
如需更多關於這些和其他回傳碼的資訊,請參閱 _doserrno 、 errno 、 _sys_errlist 、和 _sys_nerr (_doserrno, errno, _sys_errlist, and _sys_nerr) 。
在錯誤的情況下,會透過 pfh 回傳 -1 (除非 pfh 是空指標) 。
備註
_sopen_s 函式開啟由 filename 指定的檔案並準備將該檔案設置為可共用讀取或寫入,由 oflag 和 shflag 來決定。 _wsopen_s 是 _sopen_s 的寬字元版本。傳遞給 _wsopen_s 的參數 filename 的寬字元字串。 _wsopen_s 和 _sopen_s 其餘行為相同。
泛用文字常式對應
Tchar.h 常式 |
未定義的 _UNICODE 和 _MBCS |
已定義 _MBCS |
已定義 _UNICODE |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
整數表達式 oflag 是由一個或多個定義在檔案 Fcntl.h 的表示常值所組成。 當一個或多個常值組成參數 oflag 時,它們是由位元 OR 運算子組合而成 ( | ).
_O_APPEND
每次寫入運算時將檔案指標重新放置於檔案的結尾。_O_BINARY
在二進位 (未轉譯的) 模式開啟檔案。 (二進位模式的說明請參閱 fopen 。)_O_CREAT
建立並開啟檔案以供寫入。 如果 filename 指定的檔案存在,就不會有任何作用。_O_CREAT| _O_SHORT_LIVED
建立一個檔案做為暫存檔並儘可能不要被強行輸出到硬碟。_O_CREAT| _O_TEMPORARY
建立一個檔案做為暫存檔。檔案在最後一個檔案描述被關閉後刪除。_O_CREAT| _O_EXCL
如果 filename 指定的檔名已經存在,則會回傳一個錯誤值。 只有在與 _O_CREAT 一起使用時適用。_O_NOINHERIT
避免建立共用檔案描述。_O_RANDOM
指定最主要的硬碟隨機存取。_O_RDONLY
以唯讀模式開啟檔案,無法被 _O_RDWR 和 _O_WRONLY 指定。_O_RDWR
以讀寫模式開啟檔案,無法被 _O_RDONLY 和 _O_WRONLY 指定。_O_SEQUENTIAL
指定主要的硬碟序列存取。_O_TEXT
以文字模式 (已轉譯) 開啟檔案。 如需更多的資訊,請參閱 文字和二進位模式檔案 I/O (Text and Binary Mode File I/O) 和 fopen 。)_O_TRUNC
開啟檔案並將檔案長度截為零,此檔案必須有寫入的權限。 您不能以 _O_RDONLY 的指定這個旗標。 _O_TRUNC 與 _O_CREAT 共同使用開啟存在的檔案或建立新的檔案。注意事項 _O_TRUNC 旗標破壞指定檔案的內容。
_O_WRONLY
以唯寫模式開啟檔案,無法被 _O_RDONLY 或 _O_RDWR 指定。_O_U16TEXT
以 Unicode UTF-16 模式開啟檔案。_O_U8TEXT
以 UTF-8 模式開啟檔案。_O_WTEXT
以 Unicode 模式開啟檔案。
若要指定檔案存取模式,您必須指定 _O_RDONLY 或 _O_RDWR 其一,或 _O_WRONLY 。 並沒有預設的存取模式。
如果以 _O_WRONLY|_O_APPEND (擴充模式) 和 _O_WTEXT 、 _O_U16TEXT 或 _O_U8TEXT 呼叫 _sopen_s ,它會先嘗試以讀寫模式開啟檔案,讀取 BOM ,然後以唯寫模式重新開啟它。 如果以讀寫模式開啟檔案失敗,它會以唯寫模式開啟檔案並使用 Unicode 模式設定的預設值。
參數 shflag 是一個常值表達式,由以下其中一個定義於 Share.h 的表示常值組成。
_SH_DENYRW
拒絕檔案的讀寫權限。_SH_DENYWR
拒絕檔案的寫入權限。_SH_DENYRD
拒絕檔案的讀取權限。_SH_DENYNO
允許讀取和寫入權限。
不如同 _sopen , pmode 參數永遠是必須的。 當您指定 _O_CREAT 時,如果檔案不存在, pmode 指定檔案的存取權限設定,該設定於新檔案第一次關閉時設置。 否則忽略 pmode 。 pmode 是包含定義於 SYS\Stat.h 裏的表示常值 _S_IWRITE 和 _S_IREAD 其一或兩者兼有的整數表達式。 當給定兩個常值時,它們是以位元 OR 運算組合而已。 pmode 的意義如下:
_S_IWRITE
允許的寫入。_S_IREAD
允許的讀取。_S_IREAD | _S_IWRITE
允許讀取和寫入。
如果沒有寫入權限,則檔案是唯讀的。 在 Windows 作業系統中,所有檔案皆可讀取,因此不可能提供唯寫的使用權限。 因此, _S_IWRITE 和 _S_IREAD | _S_IWRITE 模式等價。
_sopen_s 在設定存取權限之前提供 pmode 目前的檔案存取權限遮罩 (請參閱 _umask) 。
需求
程序 |
必要的標頭檔 |
選擇性標頭 |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h> 、 <sys/types.h> 、 <sys/stat.h> 、 <share.h> |
_wsopen_s |
<io.h> 或 <wchar.h> |
<fcntl.h> 、 <sys/types.h> 、 <sys/stat.h> 、 <share.h> |
如需更多關於相容性的資訊,請參閱入門介紹中的 相容性 (Compatibility) 。
範例
請參閱 _locking 的範例。