共用方式為


_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 的範例。

請參閱

參考

低階 I/O

_close

_creat _wcreat

fopen _wfopen

_fsopen _wfsopen

_open _wopen