open pwrite
生活随笔
收集整理的這篇文章主要介紹了
open pwrite
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Linux中C語(yǔ)言open函數(shù)打開(kāi)或創(chuàng)建文件詳細(xì)講解
頭文件:
#include
#include
#include
函數(shù)原型:
int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
作用:以各種方式打開(kāi)文件
返回值:返回打開(kāi)的文件句柄,-1 打開(kāi)失敗
函數(shù)說(shuō)明 參數(shù)pathname 指向欲打開(kāi)的文件路徑字符串,既可以是相對(duì)路徑也可以是絕對(duì)路徑。flags參數(shù)有一系列常數(shù)值可供選擇,可以同時(shí)選擇多個(gè)常數(shù)用按位或運(yùn)算符連接起來(lái),所以這些常數(shù)的宏定義都以O(shè)_開(kāi)頭,表示or
下列是參數(shù)flags 所能使用的旗標(biāo):
必選項(xiàng):以下三個(gè)常數(shù)中必須指定一個(gè),且僅允許指定一個(gè)。
O_RDONLY 以只讀方式打開(kāi)文件
O_WRONLY 以只寫(xiě)方式打開(kāi)文件
O_RDWR 以可讀寫(xiě)方式打開(kāi)文件。上述三種旗標(biāo)是互斥的,也就是不可同時(shí)使用,但可與下列的旗標(biāo)利用OR(|)運(yùn)算符組合。
以下可選項(xiàng)可以同時(shí)指定0個(gè)或多個(gè),和必選項(xiàng)按位或起來(lái)作為flags參數(shù)。
O_CREAT 若欲打開(kāi)的文件不存在則自動(dòng)建立該文件。
O_EXCL 如果O_CREAT 也被設(shè)置,此指令會(huì)去檢查文件是否存在。文件若不存在則建立該文件,否則將導(dǎo)致打開(kāi)文件錯(cuò)誤。此外,若O_CREAT與O_EXCL同時(shí)設(shè)置,并且欲打開(kāi)的文件為符號(hào)連接,則會(huì)打開(kāi)文件失敗。
O_NOCTTY 如果欲打開(kāi)的文件為終端機(jī)設(shè)備時(shí),則不會(huì)將該終端機(jī)當(dāng)成進(jìn)程控制終端機(jī)。
O_TRUNC 若文件存在并且以可寫(xiě)的方式打開(kāi)時(shí),此旗標(biāo)會(huì)令文件長(zhǎng)度清為0,而原來(lái)存于該文件的資料也會(huì)消失。
O_APPEND 當(dāng)讀寫(xiě)文件時(shí)會(huì)從文件尾開(kāi)始移動(dòng),也就是所寫(xiě)入的數(shù)據(jù)會(huì)以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻斷的方式打開(kāi)文件,也就是無(wú)論有無(wú)數(shù)據(jù)讀取或等待,都會(huì)立即返回進(jìn)程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打開(kāi)文件。
O_NOFOLLOW 如果參數(shù)pathname 所指的文件為一符號(hào)連接,則會(huì)令打開(kāi)文件失敗。
O_DIRECTORY 如果參數(shù)pathname 所指的文件并非為一目錄,則會(huì)令打開(kāi)文件失敗。
此為L(zhǎng)inux2.2以后特有的旗標(biāo),以避免一些系統(tǒng)安全問(wèn)題。
第三個(gè)參數(shù)mode指定文件權(quán)限,可以用八進(jìn)制數(shù)表示,比如0644表示-rw-r--r--,也可以用S_IRUSR、S_IWUSR等宏定義按位或起來(lái)表示,參數(shù)mode 則有下列數(shù)種組合,只有在建立新文件時(shí)才會(huì)生效,文件權(quán)限由open的mode參數(shù)和當(dāng)前進(jìn)程的umask掩碼共同決定,因此該文件權(quán)限應(yīng)該為(mode-umaks)。
S_IRWXU00700 權(quán)限,代表該文件所有者具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IRUSR 或S_IREAD,00400權(quán)限,代表該文件所有者具有可讀取的權(quán)限。
S_IWUSR 或S_IWRITE,00200 權(quán)限,代表該文件所有者具有可寫(xiě)入的權(quán)限。
S_IXUSR 或S_IEXEC,00100 權(quán)限,代表該文件所有者具有可執(zhí)行的權(quán)限。
S_IRWXG 00070權(quán)限,代表該文件用戶組具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IRGRP 00040 權(quán)限,代表該文件用戶組具有可讀的權(quán)限。
S_IWGRP 00020權(quán)限,代表該文件用戶組具有可寫(xiě)入的權(quán)限。
S_IXGRP 00010 權(quán)限,代表該文件用戶組具有可執(zhí)行的權(quán)限。
S_IRWXO 00007權(quán)限,代表其他用戶具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IROTH 00004 權(quán)限,代表其他用戶具有可讀的權(quán)限
S_IWOTH 00002權(quán)限,代表其他用戶具有可寫(xiě)入的權(quán)限。
S_IXOTH 00001 權(quán)限,代表其他用戶具有可執(zhí)行的權(quán)限。
返回值 若所有欲核查的權(quán)限都通過(guò)了檢查則返回0 值,表示成功,只要有一個(gè)權(quán)限被禁止則返回-1。
錯(cuò)誤代碼 EEXIST 參數(shù)pathname 所指的文件已存在,卻使用了O_CREAT和O_EXCL旗標(biāo)。
EACCESS 參數(shù)pathname所指的文件不符合所要求測(cè)試的權(quán)限。
EROFS 欲測(cè)試寫(xiě)入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi)。
EFAULT 參數(shù)pathname指針超出可存取內(nèi)存空間。
EINVAL 參數(shù)mode 不正確。
ENAMETOOLONG 參數(shù)pathname太長(zhǎng)。
ENOTDIR 參數(shù)pathname不是目錄。
ENOMEM 核心內(nèi)存不足。
ELOOP 參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題。
頭文件:
#include
#include
#include
函數(shù)原型:
int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
作用:以各種方式打開(kāi)文件
返回值:返回打開(kāi)的文件句柄,-1 打開(kāi)失敗
函數(shù)說(shuō)明 參數(shù)pathname 指向欲打開(kāi)的文件路徑字符串,既可以是相對(duì)路徑也可以是絕對(duì)路徑。flags參數(shù)有一系列常數(shù)值可供選擇,可以同時(shí)選擇多個(gè)常數(shù)用按位或運(yùn)算符連接起來(lái),所以這些常數(shù)的宏定義都以O(shè)_開(kāi)頭,表示or
下列是參數(shù)flags 所能使用的旗標(biāo):
必選項(xiàng):以下三個(gè)常數(shù)中必須指定一個(gè),且僅允許指定一個(gè)。
O_RDONLY 以只讀方式打開(kāi)文件
O_WRONLY 以只寫(xiě)方式打開(kāi)文件
O_RDWR 以可讀寫(xiě)方式打開(kāi)文件。上述三種旗標(biāo)是互斥的,也就是不可同時(shí)使用,但可與下列的旗標(biāo)利用OR(|)運(yùn)算符組合。
以下可選項(xiàng)可以同時(shí)指定0個(gè)或多個(gè),和必選項(xiàng)按位或起來(lái)作為flags參數(shù)。
O_CREAT 若欲打開(kāi)的文件不存在則自動(dòng)建立該文件。
O_EXCL 如果O_CREAT 也被設(shè)置,此指令會(huì)去檢查文件是否存在。文件若不存在則建立該文件,否則將導(dǎo)致打開(kāi)文件錯(cuò)誤。此外,若O_CREAT與O_EXCL同時(shí)設(shè)置,并且欲打開(kāi)的文件為符號(hào)連接,則會(huì)打開(kāi)文件失敗。
O_NOCTTY 如果欲打開(kāi)的文件為終端機(jī)設(shè)備時(shí),則不會(huì)將該終端機(jī)當(dāng)成進(jìn)程控制終端機(jī)。
O_TRUNC 若文件存在并且以可寫(xiě)的方式打開(kāi)時(shí),此旗標(biāo)會(huì)令文件長(zhǎng)度清為0,而原來(lái)存于該文件的資料也會(huì)消失。
O_APPEND 當(dāng)讀寫(xiě)文件時(shí)會(huì)從文件尾開(kāi)始移動(dòng),也就是所寫(xiě)入的數(shù)據(jù)會(huì)以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻斷的方式打開(kāi)文件,也就是無(wú)論有無(wú)數(shù)據(jù)讀取或等待,都會(huì)立即返回進(jìn)程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打開(kāi)文件。
O_NOFOLLOW 如果參數(shù)pathname 所指的文件為一符號(hào)連接,則會(huì)令打開(kāi)文件失敗。
O_DIRECTORY 如果參數(shù)pathname 所指的文件并非為一目錄,則會(huì)令打開(kāi)文件失敗。
此為L(zhǎng)inux2.2以后特有的旗標(biāo),以避免一些系統(tǒng)安全問(wèn)題。
第三個(gè)參數(shù)mode指定文件權(quán)限,可以用八進(jìn)制數(shù)表示,比如0644表示-rw-r--r--,也可以用S_IRUSR、S_IWUSR等宏定義按位或起來(lái)表示,參數(shù)mode 則有下列數(shù)種組合,只有在建立新文件時(shí)才會(huì)生效,文件權(quán)限由open的mode參數(shù)和當(dāng)前進(jìn)程的umask掩碼共同決定,因此該文件權(quán)限應(yīng)該為(mode-umaks)。
S_IRWXU00700 權(quán)限,代表該文件所有者具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IRUSR 或S_IREAD,00400權(quán)限,代表該文件所有者具有可讀取的權(quán)限。
S_IWUSR 或S_IWRITE,00200 權(quán)限,代表該文件所有者具有可寫(xiě)入的權(quán)限。
S_IXUSR 或S_IEXEC,00100 權(quán)限,代表該文件所有者具有可執(zhí)行的權(quán)限。
S_IRWXG 00070權(quán)限,代表該文件用戶組具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IRGRP 00040 權(quán)限,代表該文件用戶組具有可讀的權(quán)限。
S_IWGRP 00020權(quán)限,代表該文件用戶組具有可寫(xiě)入的權(quán)限。
S_IXGRP 00010 權(quán)限,代表該文件用戶組具有可執(zhí)行的權(quán)限。
S_IRWXO 00007權(quán)限,代表其他用戶具有可讀、可寫(xiě)及可執(zhí)行的權(quán)限。
S_IROTH 00004 權(quán)限,代表其他用戶具有可讀的權(quán)限
S_IWOTH 00002權(quán)限,代表其他用戶具有可寫(xiě)入的權(quán)限。
S_IXOTH 00001 權(quán)限,代表其他用戶具有可執(zhí)行的權(quán)限。
返回值 若所有欲核查的權(quán)限都通過(guò)了檢查則返回0 值,表示成功,只要有一個(gè)權(quán)限被禁止則返回-1。
錯(cuò)誤代碼 EEXIST 參數(shù)pathname 所指的文件已存在,卻使用了O_CREAT和O_EXCL旗標(biāo)。
EACCESS 參數(shù)pathname所指的文件不符合所要求測(cè)試的權(quán)限。
EROFS 欲測(cè)試寫(xiě)入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi)。
EFAULT 參數(shù)pathname指針超出可存取內(nèi)存空間。
EINVAL 參數(shù)mode 不正確。
ENAMETOOLONG 參數(shù)pathname太長(zhǎng)。
ENOTDIR 參數(shù)pathname不是目錄。
ENOMEM 核心內(nèi)存不足。
ELOOP 參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題。
EIO I/O 存取錯(cuò)誤。
如果存在寫(xiě)的文件,原有文件清空
int fd = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, S_IRWXU);
如果在原有文件的基礎(chǔ)上追加
fd?=?open("my.txt",O_RDWR|O_CREAT|O_APPEND,S_IRWXU);
最后一個(gè)參數(shù)是文件的權(quán)限
如果只是讀文件,open的參數(shù)很簡(jiǎn)單
int fd = open(argv[1], O_RDONLY);
總結(jié)
以上是生活随笔為你收集整理的open pwrite的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。