01
程序文件
#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;
}
02
测试结果
root@lj:/mnt/hgfs/shared-lj# ./a.out
成功, fd = 3