环境:Vmware Workstation;CentOS-6.4-x86_64
小技巧:查询open的帮助文档
<pre class="plain" name="code">[negivup@negivup mycode]$ man 2 open
说明:
open函数的定义形式:int open(const char *pathname, int flags);
返回值:
1、返回值是一个整数。
2、打开文件成功,返回文件描述符。
3、打开文件失败,返回-1。
图解说明:
步骤:
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_RDONLY);
printf("fd1 = %d\n", fd1);
close(fd1);
// 以只读方式打开一个不存在的文件
int fd2 = open("b.txt", O_RDONLY);
printf("fd2 = %d\n", fd2);
close(fd2);
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、创建文件a.txt,编译并执行结果:
[negivup@negivup mycode]$ touch a.txt
[negivup@negivup mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o
-----------------------------OK-----------------------
[negivup@negivup mycode]$ ./main
fd1 = 3
fd2 = -1
从程序的执行结果可以看出,打开文件成功,返回的是文件的描述符;打开文件失败,返回的是-1。
需要注意一点:由于文件描述符0、1、2已经默认存在了,因此,新打开的文件的文件描述符是从3开始的。
PS:根据传智播客视频学习整理得出。