1 demo1.c的建立
首先打开终端输入
touch file1
接着输入:
vi demo1.c
接着重新打开一个终端,输入:
man 2 open
2 demo1.c内容编辑
2.1 复制头文件
2.2 程序基础框架
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
return 0;
}
2.3 open函数介绍
该函数有两个函数原型,其实是参数的数量问题。
函数原型1:
int open(const char*pathname,int flags);
第一个参数是要打开的文件名,第二个参数是特殊常量,用于指定怎么打开文件。具体常量如下参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开
这三个常量,必须制定一个且只能指定一
示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{
int fd;
fd = open("./file1",O_RDWR);
printf("fd = %d\n",fd);
return 0;
}
保存,接着执行程序
gcc demo1.c
./a.out
执行结果如下:
接着删除文件file1 ,输入如下:
rm file1
./a.out
运行结果如下:
可以验证返回值:成功打开返回打开文件的文件描述符,是int类型,失败返回-1.
2.3 自动创建文件
若想实现文件不存在,自动创建文件则需要函数原型2,如下所示:
函数原型2:
int open(const char*pathname,int flags,mode_t mode);
O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容
前两个参数与上相同,第三个参数是设定该文件的权限,具体参数如下
S_IRUSR : 文件所有者有读(r)权限
S_IWUSR : 文件所有者有写(w)权限
S_IRGRP : 文件所属组有读(r)权限
S_IWGRP : 文件所属组有写(w)权限
S_IROTH : 文件所属other有读(r)权限
S_IWOTH : 文件所属other有写(w)权限
总结:
权限主要分为如下三类:
1 可读:R ----4
2 可写: W ----2
3 执行: X ----1
0600-给文件所有者可读可写权限
示例,首先输入:
cp demo1.c demo2.c
vi demo2.c
示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{
int fd;
fd = open("./file1",O_RDWR);
if(fd == -1){
printf("open file1 failed\n");
fd = open("./file1",O_RDWR|O_CREAT,0600);
if(fd>0){
printf("create file1 success\n");
}
}
return 0;
}
保存,输入:
gcc demo2.c
./a.out
结果如下:
以上所述,如有错误,恳请各位大佬指正。