creat 与open 系统调用
2016-05-27 16:25
351 查看
creat:
创建文件,显然参数只需要(路径path,权限mode)。
1、如果文件存在怎么办?直接覆盖掉!不管你里面有没有内容。
创建成功,但是有个问题。
给的权限八进制777最大权限,但是查看权限的并不是。
此处设定的mode的值并不是文件最终的权限,文件最终的权限是按照mode & ~umask得到的,而默认的umask是0022,所以如果想按照mode的值设置文件权限,需要在建立文件之前将umask的值设置为0000。加一句umask(0000),即可。
open:
我们先自己分析一下open需要提供哪些功能。
1、要打开一个文件,显然要给出路径path,还有打开方式flag(只读、只写、可读可写).
文件的打开方式跟权限是有区别的,比如文件的user拥有所有权限,但是它也可以只读打开文件,有权限我不一定用。
2、如果打开的文件不存在怎么办?应该要file not exit !报错。还应该提示是否创建这样一个新的文件,这时候需要第三个参数mode,表示新创建的文件的权限。
然而,open()真的是如我们分析的吗?
关于新建文件:
使用create函数:
创建一个文件,如果用creat(path ,mode )函数,则为只写。因为creat的返回值也是一个fd。所以你可以紧接着用这个fd,但是只能写!
1、文件不存在时候:创建一个新文件。只写。
2、文件存在时,直接清零,不管之前的文件是否有内容。
相当于open(path,O_WRONLY|CREAT|O_ TRUNC,0777)
用open可以随心所欲:
文件不存在,可创建只读、只写、或者可读可写的文件
文件存在时,可以将其清0,或者追加。
文件存在时,可报错 file exits!
所以可以完全不用create,以后就用open来进行创建。
关于打开文件:
打开文件只能用open函数。
返回一个fd,对打开的而文件, 有只读、只写、可读可写三种基本方式。
其它还有:
追加方式,O_APPEND如果不设置的话,就会从头开始写。
清零,每次写的时候,先清零(这个只在只写方式下有效)。
举几个例子:
1、创建一个文件,并给予最大权限,如果文件已经存在,则报错。
创建文件,显然参数只需要(路径path,权限mode)。
1、如果文件存在怎么办?直接覆盖掉!不管你里面有没有内容。
#include <sys/types.h> #include <fcntl.h> #include <sys/stat.h> #include<iostream> using namespace std; int main() { int fd; //umask(0000); fd=creat("grb.txt",0777); if(fd==0) cout<<"create failed!\n"; else cout<<"create successful!\n"; }
创建成功,但是有个问题。
给的权限八进制777最大权限,但是查看权限的并不是。
此处设定的mode的值并不是文件最终的权限,文件最终的权限是按照mode & ~umask得到的,而默认的umask是0022,所以如果想按照mode的值设置文件权限,需要在建立文件之前将umask的值设置为0000。加一句umask(0000),即可。
open:
我们先自己分析一下open需要提供哪些功能。
1、要打开一个文件,显然要给出路径path,还有打开方式flag(只读、只写、可读可写).
文件的打开方式跟权限是有区别的,比如文件的user拥有所有权限,但是它也可以只读打开文件,有权限我不一定用。
2、如果打开的文件不存在怎么办?应该要file not exit !报错。还应该提示是否创建这样一个新的文件,这时候需要第三个参数mode,表示新创建的文件的权限。
然而,open()真的是如我们分析的吗?
关于新建文件:
使用create函数:
创建一个文件,如果用creat(path ,mode )函数,则为只写。因为creat的返回值也是一个fd。所以你可以紧接着用这个fd,但是只能写!
1、文件不存在时候:创建一个新文件。只写。
2、文件存在时,直接清零,不管之前的文件是否有内容。
相当于open(path,O_WRONLY|CREAT|O_ TRUNC,0777)
用open可以随心所欲:
文件不存在,可创建只读、只写、或者可读可写的文件
文件存在时,可以将其清0,或者追加。
文件存在时,可报错 file exits!
所以可以完全不用create,以后就用open来进行创建。
关于打开文件:
打开文件只能用open函数。
返回一个fd,对打开的而文件, 有只读、只写、可读可写三种基本方式。
其它还有:
追加方式,O_APPEND如果不设置的话,就会从头开始写。
清零,每次写的时候,先清零(这个只在只写方式下有效)。
举几个例子:
1、创建一个文件,并给予最大权限,如果文件已经存在,则报错。
#include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> #include<sys/stat.h> #include<fcntl.h> #include<error.h> int main() { umask(0000); int fd=open("guo0.txt",O_EXCL|O_CREAT,0777);//新建一个文件,并给予最大权限,若存在则报错。 if(fd==-1) { printf("creat failed!\n"); } else { printf("creat successful!\n"); } close(fd); return 0; }
相关文章推荐
- docker daemon的HTTP socket TLS加密连接
- linux之VI编辑器使用
- 防范钓鱼网站
- kalilinux下使用Aircrack-ng破解过程
- CocoPods的安装步骤
- linux中常用的一些命令
- ARM linux s3c2440 解决黑屏问题
- Nomachine AWS RHEL7 & Ubuntu Remote desktop connection
- Unix & Linux 笔记(10)
- linux 内存释放命令
- StyleCop学习笔记——默认的规则
- 如何更高效的使用MVP以及官方MVP架构解析
- StyleCop学习笔记——自定义规则
- Apache服务器最新版下载、安装及配置(win版)
- opencv的change log
- StyleCop学习笔记——初识StyleCop
- Linux命令大全
- Zero Copy 简介
- apache、CDH、HDP hadoop源码下载
- 初学linux命令-mkdir、rm、rmdir、mv