作者:胆小的女屌丝 | 来源:互联网 | 2023-09-03 12:34
环境:VmwareWorkstation;CentOS-6.4-x86_64说明:open函数的定义形式:intopen(constchar*pathname,intflags);
环境: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
#include
// 包含close所需要的头文件
#include
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 $@ -c $<
clean:
rm -rf $(EXEC) $(OBJS)
3、编译并执行程序:
[negivup@negivup mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o
-----------------------------OK-----------------------
[negivup@negivup mycode]$ ./main
fd1 = 3
根据程序的执行结果可以看出,在没有创建文件a.txt的时候,执行程序也会正确返回文件描述符,这就说明了,使用O_CREAT在打开文件的时候,如果文件不存在,就会创建。 特别说明:以O_CREAT方式打开的文件,创建之后,这个文件的权限是只读的。
PS:根据传智播客视频学习整理得出。