open和close函式
open函式:開啟或建立檔案
系統呼叫open可以用來開啟普通檔案、塊裝置檔案、字元裝置檔案、連結檔案和管道檔案,但只能用來建立普通檔案,建立特殊檔案需要使用特定的函式。
標頭檔案:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函式原型:
int open(const char *pathname,int flages);
int open(const char *pathname,int flages,mode_t mode);
pathname:需要開啟或想要建立的含路徑的檔名。
flags:檔案狀態標誌位,表示開啟檔案的方式。
mode:如果檔案被新建立,指定該許可權為mode(八進位制表示法);
返回值:
0:標準輸出
1:標準輸入
2:標準出錯
我們得到的檔案描述符都是從3開始的,檔案描述符又稱檔案ID,每個檔案的檔案描述符都是唯一的。
返回值小於零時,表示建立或開啟檔案失敗。
flages引數
flages引數可以用來說明open函式的多個選擇,引數值可以分兩類:一類是主標誌,一類是副標誌。
1)主標誌是互斥的,使用了其中一種則不能再使用另外一種。
主標誌如下:
O_RDONLY: | 以只讀方式開啟 |
---|---|
O_WRONLY: | 以只寫方式開啟 |
O_RDWR: | 以可讀可寫方式開啟 |
2)副標誌可同時使用多個,使用時在主標誌和副標誌直接加入按位與(|)運算子
副標誌如下:
O_CREAT | 建立一個檔案,檔案存在時 ,也能成功。如果檔案不存在時,才需要用到第三個引數mode,以說明新檔案的存取許可權 |
---|---|
O_EXCL | 如果O_CREAT也被設定,此命令會檢查檔案是否存在。若檔案不存在,則建立該檔案;若檔案存在則導致開啟檔案出錯,返回檔案描述符-1 |
O_TRUNC | 開啟檔案(將檔案裡的內容清空) |
O_APPEND | 追加方式開啟檔案(不會把檔案當中已經存在的內容刪除) |
close()函式:
關閉一個檔案,將檔案描述符還給Linux系統。通過close函式關閉檔案並釋放相應的資源,防止核心為繼續維護它而付出代價。
標頭檔案
#include <unistd.h>
檔案原型
int close(int fd);
引數
fd:即將要關閉的檔案描述符。
返回值
0:成功 -1:失敗
利用open函式實現touch命令:
程式如下:
O_CREAT:建立一個檔案,檔案存在時 ,也能成功
若 O_CREAT|O_EXCEL,檔案存在時建立檔案,返回的檔案描述符為-1,建立失敗
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char *arge[])//
{
int fd;
fd = open(arge[1],O_CREAT|O_EXCL | O_RDWR,0777);
if(fd < 0){
printf("creat file %s failure\n",arge[1]);
return -1;
}
printf("creat file %s is sucess, fd = %d\n",arge[1],fd);
close(fd);
return 0;
}
umask 掩碼
open函式建立檔案的許可權=mode &(~umask)
O_RDWR :檔案的許可權為可讀可寫
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char *arge[])//傳參
{
int fd;
fd = open(arge[1],O_CREAT | O_RDWR,0777);//與掩碼0022異或,所以其許可權為755
if(fd < 0){
printf("creat file %s failure\n",arge[1]);
return -1;
}
printf("creat file %s is sucess, fd = %d\n",arge[1],fd);
close(fd);
return 0;
}
O_APPEND:追加方式開啟檔案(不會把檔案當中已經存在的內容刪除)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char *arge[])
{
int fd;
fd = open("./a.c",O_APPEND | O_RDWR);
if(fd < 0){
printf("open file %s failure\n",arge[1]);
return -1;
}
printf("open file %s is sucess, fd = %d\n",arge[1],fd);
close(fd);
return 0;
}
O_TRUNC 開啟檔案(會把已經存在的內容刪除)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char *arge[])
{
int fd;
fd = open("./a.c",O_TRUNC | O_RDWR);
if(fd < 0){
printf("open file %s failure\n",arge[1]);
return -1;
}
printf("open file %s is sucess, fd = %d\n",arge[1],fd);
close(fd);
return 0;
}
相關文章
- 關於close函式和cp命令函式
- C#中解構函式,Close函式,Dispose函式的區別C#函式
- C中的open(), write(), close(), fopen()
- document.close()函式簡單介紹函式
- dbms_session.set_close_cached_open_cursors(true)Session
- apr_file_open函式用法心得函式
- 12C-ORA-65086: cannot open/close the pluggable databaseDatabase
- python IO模組【二】:open函式詳解Python函式
- window.open()函式引數用法詳解函式
- Fastadmin fast.api.open回撥函式ASTAPI函式
- Python中open函式怎麼操作檔案Python函式
- 字元函式、數字函式和日期函式字元函式
- PHP4使用者手冊:函式->CURL->curl_close (轉)PHP函式
- 類函式和物件函式 PHP函式物件PHP
- 函式防抖和函式節流函式
- 函式基礎和函式引數函式
- Rust中的into函式和from函式Rust函式
- Python strip函式和split函式Python函式
- ascii函式和substr函式的用法ASCII函式
- 指標函式 和 函式指標指標函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- 函式宣告和函式表示式的區別函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- 防止window.open()函式彈出視窗被攔截函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- JS函式節流和函式防抖JS函式
- gethostbyname函式和getservbyname函式的應用函式
- Socket send函式和recv函式詳解函式
- prop()函式和attr()函式的區別函式
- ES6-Generator 函式 和 async 函式函式
- JS閉包函式和回撥函式JS函式
- Python私有函式和公開函式Python函式
- C++的函式和模板函式 (轉)C++函式
- strcpy函式和memcpy函式的區別函式memcpy
- 函式表示式和函式宣告簡單介紹函式
- php artisan horizon執行時 proc_open 函式禁用問題PHP函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式