Linux系统编程--文件编程--打开创建文件

创建文件需要包含以下3个头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
打开、创建文件有以下3个API

open的返回值——文件描述符(索引作用),是一个小的非负整数

int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);

int creat(const char*pathname,mode_t mode);
pathname 要打开的文件名(含路径,缺省为当前路径)

flags:权限:O_RDONLY只读打开, O_WRONLY只写打开, O_RDWR可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作,以上3个常数中应当只指定1个。

下列常数是可选择的:

O_CREAT若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。

O_EXCL如果同时指定了O_CREAT,而文件已存在,则出错。

O_APPEND每次写时都加到文件的尾端。

O_TRUNC属性去打开文件时,如果这个文件中本来时有内容的,而且为只读或只写成功打开,则将其长度截短为0.

mode:一定是flages中使用了O_CREAT标志,mode记录待创建的文件的访问权限。

代码实际演示:

1、创建1个demo1.c文件

#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;
}
编译运行输出fd=3,打开成功

第二次运行则fd=-1,表示打开失败

2、复制demo1.c为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("./fail1",O_RDWR|O_CREAT,0600);
if(fd>0){
printf("creat file1 succse\n");
}
}
printf("fd=%d\n",fd);
return 0;
}

编译运行,结果为

open file1 failed
creat file1 succse
fd=3
发送命令ls,能看到多了一个file1文件

a.out demo1.c demo2.c fail1

ls -l(把所有文件清单列出)

-rwxr-xr-x 1 CLC book 8479 Apr 4 17:25 a.out
-rw-r--r-- 1 CLC book 169 Apr 4 17:07 demo1.c
-rw-r--r-- 1 CLC book 310 Apr 4 17:25 demo2.c
-rw------- 1 CLC book 0 Apr 4 17:25 fail1
-为普通文件,r为可读权限,w为可写权限,x为可执行权限

看fail1,为可读可写文件

文件权限一般分为3种:可读、可写、可执行

结合代码中mode=0600看:6=4+2(代表可读可写)

4为可读(r),2为可写(w),1为可执行(1)

0600,倒数第一位代表其他组,倒数第二位代表同组,倒数第三位是给文件所有者的权限

0700,表示可读写执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值