open()函数介绍:

1.open( )函数需要包含的头文件:

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

2.open()函数的形式:

int open(const char* pathname, int oflag,.../*, mode_t mode * / )

3.open()函数的参数说明:

open()函数成功则返回文件描述符,失败则返回-1。第一个参数是文件的路径,第二个参数是文件的权限,第三个参数只有新建文件时才填写,用8进制的数(与umask有关)代表新建文件的权限。

open()函数的第二个参数:

在open函数中,我们将第三个参数写为. . .,这是ANSI C说明余下参数的数目和类型可以变化的方法。对于o p e n函数而言,仅当创建新文件时才使用第三个参数。p a t h n a m e是要打开或创建的文件的名字。o f l a g参数可用来说明此函数的多个选择项。用下列一个或多个常数进行或运算构成o f l a g参数(这些常数定义在< f c n t l . h >头文件中):
• O_RDONLY 只读打开。打开文件只做读操作(read())
• O_WRONLY 只写打开。(write())
• O_RDWR 读、写打开。
在这三个常数中应当只指定一个。下列常数则是可选择的:
• O_APPEND 每次写时都加到文件的尾端。(原子操作)
• O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数m o d e,用其说明该新文件的存取许可权位。mode值及如何修改mode值将在后面讨论。
• O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
• O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
• O_NOCTTY 如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。
• O_NONBLOCK 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
• O_SYNC 使每次write都等到物理I / O操作完成,即数据已经写到硬盘才返回。没有O_SYNC选项,则把数据写到缓冲区就返回,缓冲区会在合适的时候把缓冲区的数据一起写到硬盘,这样会减少操作硬盘的次数。

实例代码

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main(){
	int fd, ret;

	/*打开文件
	fd = open("example.text", O_RDWR);
	if(fd == -1){
		perror("open file:");
		exit(1);
	}
	printf("fd = %d\n", fd);

	ret = close(fd); //close函数成功返回0,失败返回-1
	printf("ret = %d\n", ret);
	if(ret == -1){
		perror("close file:");
		exit(1);
	}
	*/

	/*创建新文件,0777是8进制的数代表权限,文件真正的权限是0777与umask掩码(取反)相与
	fd = open("hello.text", O_RDWR | O_CREAT, 0777);
	if(fd == -1){
		perror("creat file");
		exit(1);
	}
	printf("new file: fd = %d\n", fd);
	ret = close(fd);
	if(ret == -1){
		perror("close file");
		exit(1);
	}
	printf("close file succes\n");
	*/

	/*检查文件是否存在。文件存在就会报错
	fd = open("hello world.text", O_RDWR | O_CREAT | O_EXCL);
	if(fd == -1){
		perror("open file:");
		exit(1);
	}
	printf("creat file\n");
	*/

	//截断文件,就是格式化
	 fd = open("hello.text", O_RDWR | O_TRUNC);
	 if(fd == -1){
	 	perror("fail");
	 	exit(1);
	 }
	 printf("succes\n");
}