環境:Vmware Workstation;CentOS-6.4-x86_64
說明:
open函數的定義形式:int open(const char *pathname, int flags);
參數說明:
1、pathname指的是檔案的路徑+檔案名,路徑可以是相對路徑,也可以是絕對路徑。
2、flags指的是打開檔案的狀态:O_RDONLY、O_WRONLY、O_RDWR、O_CREAT、O_APPEND。
圖解說明:
特别說明:
O_APPEND,追加方式,就是打開一個檔案,如果向檔案中寫入内容的話,會在原有内容的基礎上在最後添加。
O_CREAT,建立方式,就是原來沒有這個檔案,通過這個模式,會自動建立一個檔案并打開(注意這個詞的拼寫方式)。
步驟:
1、建立并編輯源檔案main.c:
#include <sys/stat.h>
#include <fcntl.h>
// 包含close所需要的頭檔案
#include <unistd.h>
int main(int argc, char *args[])
{
// 以建立的方式打開一個不存在的檔案
int fd1 = open("a.txt", O_CREAT);
printf("fd1 = %d\n", fd1);
close(fd1);
return 0;
}
2、建立并編輯檔案makefile:
.SUFFIXES:.c .o
CC=gcc
SRCS=main.c
OBJS=$(SRCS:.c=.o)
EXEC=main
start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "-----------------------------OK-----------------------"
.c.o:
$(CC) -Wall -o [email protected] -c $<
clean:
rm -rf $(EXEC) $(OBJS)
3、編譯并執行程式:
[[email protected] mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o
-----------------------------OK-----------------------
[[email protected] mycode]$ ./main
fd1 = 3
根據程式的執行結果可以看出,在沒有建立檔案a.txt的時候,執行程式也會正确傳回檔案描述符,這就說明了,使用O_CREAT在打開檔案的時候,如果檔案不存在,就會建立。 特别說明:以O_CREAT方式打開的檔案,建立之後,這個檔案的權限是隻讀的。
PS:根據傳智播客視訊學習整理得出。