_chmod、_wchmod
變更檔案的使用權限集合。
int _chmod(
const char *filename,
int pmode
);
int _wchmod(
const wchar_t *filename,
int pmode
);
參數
filename
現存檔的名稱。pmode
檔案的使用權限設定。
傳回值
如果成功變更,這些函式傳回 0 使用權限設定。 傳回值為 -1 表示失敗。 如果找不到指定的檔案, errno 設定為 ENOENT;如果參數無效, errno 設定為 EINVAL。
備註
檔案的使用權限集合是由 filename指定的 _chmod 函式變更*。*使用權限設定控制對檔案的讀取和寫入。 整數運算式 pmode 包含定義於 SYS\Stat.h 裏的下列資訊清單常值其一或兩者兼有的整數表達式。
_S_IWRITE
允許的寫入。_S_IREAD
允許的讀取。_S_IREAD | _S_IWRITE
允許讀取和寫入。
當給定兩個常值時,它們以位元連接藉由 OR 運算子(|). 如果沒有寫入權限,則檔案是唯讀的。 請注意所有檔案都是可讀取的;寫入唯寫權限是不可能的。 因此, _S_IWRITE 和 _S_IREAD | _S_IWRITE 模式等價。
_wchmod 是 _chmod 的寬字元版本。 _wchmod 的 filename 引數是寬字元字串。 _wchmod 和 _chmod 其餘行為相同。
這個函式會驗證它的參數。 如果 pmode 不是其中一個組件資訊清單常數也不會合併替代組常數,函式會忽略參數。 如果 filename 是 NULL,則叫用無效參數處理常式,如 參數驗證 中所述。 如果允許繼續執行,errno 會被設定為 EINVAL 且函式會傳回-1 。
一般文字常式對應
Tchar.h 常式 |
未定義 _UNICODE and _MBCS |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tchmod |
_chmod |
_chmod |
_wchmod |
需求
常式 |
必要的標頭 |
選擇性標頭 |
---|---|---|
_chmod |
<io.h> |
<sys/types.h>, <sys/stat.h>, <errno.h> |
_wchmod |
<io.h> or <wchar.h> |
<sys/types.h>, <sys/stat.h>, <errno.h> |
如需更多關於相容性的資訊,請參閱入門介紹中的 相容性 (Compatibility) 。
範例
// crt_chmod.c
// This program uses _chmod to
// change the mode of a file to read-only.
// It then attempts to modify the file.
//
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
// Change the mode and report error or success
void set_mode_and_report(char * filename, int mask)
{
// Check for failure
if( _chmod( filename, mask ) == -1 )
{
// Determine cause of failure and report.
switch (errno)
{
case EINVAL:
fprintf( stderr, "Invalid parameter to chmod.\n");
break;
case ENOENT:
fprintf( stderr, "File %s not found\n", filename );
break;
default:
// Should never be reached
fprintf( stderr, "Unexpected error in chmod.\n" );
}
}
else
{
if (mask == _S_IREAD)
printf( "Mode set to read-only\n" );
else if (mask & _S_IWRITE)
printf( "Mode set to read/write\n" );
}
fflush(stderr);
}
int main( void )
{
// Create or append to a file.
system( "echo /* End of file */ >> crt_chmod.c_input" );
// Set file mode to read-only:
set_mode_and_report("crt_chmod.c_input ", _S_IREAD );
system( "echo /* End of file */ >> crt_chmod.c_input " );
// Change back to read/write:
set_mode_and_report("crt_chmod.c_input ", _S_IWRITE );
system( "echo /* End of file */ >> crt_chmod.c_input " );
}
文字行。
FakePre-65d1dc35df604b3eb1be3fe937c4b50b-e063a2afc1284e0eab1c0409ff57d777