天天看點

Linux系統函數open和close(03)---open函數的參數

環境: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。

圖解說明:

Linux系統函數open和close(03)---open函數的參數

特别說明:

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:根據傳智播客視訊學習整理得出。

繼續閱讀