1. 程式人生 > >系統程式設計——open()函式的使用

系統程式設計——open()函式的使用

1、程式檔案

#include <stdio.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <errno.h>

int main()
{
	// close(1);
	
	// 第一個引數:要開啟得檔名
	// 第二個引數:開啟方式
	
	// O_RDONLY —— 只讀
	// O_WRONLY —— 只寫
	// O_RDWR   —— 可讀寫
	
	// O_CREAT:檔案不存在時,建立該檔案, 檔案的許可權由第三個引數決定,最終的許可權:mode & (~umask)
	// 檔案描述符:開啟檔案的時候返回的檔案描述符預設使用當前可用的最小的檔案描述符
	// 此時得fd得值為3
	// 0 —— 標準輸入
	// 1 —— 標準輸出
	// 2 —— 標準錯誤
	
	// open	函式是對檔案裝置的開啟操作,
	// 這個函式會返回一個控制代碼fd,我們通過這個控制代碼fd對裝置檔案讀寫操作。
	
	// open函式返回的檔案描述符fd一定是未使用的最小的檔案描述符,那麼如果0沒有使用,
	// 那麼我們open的時候,首先就會獲取到fd=0的情況。
	// 預設情況下,0,1,2這三個控制代碼對應的是標準輸入, 標準輸出,標準錯誤,
	// 系統程序預設會開啟0,1,2這三個檔案描述符,
	// 而且指向了鍵盤和顯示器的裝置檔案。所以通常我們open的返回值是從3開始的。
	// 如果我們在open之前,close其中的任何一個,則open的時候,則會用到close的最小的值。

	// 呼叫成功時返回一個檔案描述符fd
	int fd = open("abc", O_WRONLY | O_CREAT, 0777);
	
	if (-1 == fd)
	{
		printf ("開啟檔案失敗\n");
		
		// 呼叫失敗時返回-1,並修改errno
		printf ("errno : %d\n", errno);
		
		// 列印錯誤資訊,引數是相關提示
		perror ("開啟man1.txt檔案失敗");   
		
		return -1;
	}
	
	printf ("成功, fd = %d\n", fd);

	fflush(stdout);
	close(fd);
	
	return 0;
}

2、測試結果

[email protected]:/mnt/hgfs/shared-lj# ./a.out 
成功, fd = 3