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;
}
相關文章
- C中的open(), write(), close(), fopen()
- How to open and close static streams in a USB bulk endpoint
- Fastadmin fast.api.open回撥函式ASTAPI函式
- python IO模組【二】:open函式詳解Python函式
- Python中open函式怎麼操作檔案Python函式
- socket close和shutdown的區別,TIME_WAIT和CLOSE_WAIT,SO_REUSEADDRAI
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- 函式防抖和函式節流函式
- 函式基礎和函式引數函式
- 指標函式 和 函式指標指標函式
- Rust中的into函式和from函式Rust函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- JS函式節流和函式防抖JS函式
- ES6-Generator 函式 和 async 函式函式
- JavaScript中的compose函式和pipe函式JavaScript函式
- java自定義equals函式和hashCode函式Java函式
- strcpy函式和memcpy函式的區別函式memcpy
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- php artisan horizon執行時 proc_open 函式禁用問題PHP函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- kotlin 函式和 Lambda 表示式Kotlin函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- 函式柯里化和偏函式應用函式
- # 普通函式和箭頭函式的區別函式
- Python之operator.itemgetter函式和sorted函式Python函式
- iOS-GCD常用函式和柵欄函式iOSGC函式
- 【Spark篇】---SparkSql之UDF函式和UDAF函式SparkSQL函式
- 15.3 極限函式與和函式性質函式
- map 和 lambda 函式函式
- webgl內建函式--角度和三角函式Web函式
- 第 8 節:函式-函式定義和引數函式
- C語言中函式printf()和函式scanf()的用法C語言函式
- 淺談js函式節流和函式防抖JS函式
- 為複合函式和反函式做好準備函式
- 5.函式和lambda表示式函式
- JS 中的函式表示式和函式宣告你混淆了嗎?JS函式