linux系统函数学习_(1)open函数和close函数
open()函数
头文件
#include <unistd.h>
#include<fcntl.h>
功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)
函数原型:
int open(const char* pathname, int flags);
int open(const char* pathname, int flags, mode_t mode);
参数:
- pathname: 文件的相对或绝对路径
- flags:打开方式
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR可读可写打开
可选项:
O_APPEND表示追加
O_CREAT若此文件不存在则创建它(使用此选项时需要提供第三个参数mode,表示文件权限,文件权限由open函数的mode参数和当前进程的umask掩码共同决定)
文件创建的最终权限mode&~umask :0777&(~0002)=0775 (rwx)
另外:
S_IRUSR: 文件所有者有读 ( r ) 权限
S_IWUSR: 文件所有者有写 (w) 权限
S_IRGRP: 文件所属组有读 ( r ) 权限
S_IWGRP: 文件所属组有写 (w) 权限
S_IROTH: 文件所属other有读 ( r ) 权限
S_IWOTH: 文件所属other有写 (w) 权限
O_EXCL如果同时指定了O_CREATE,并且文件已存在,则出错返回
O_TRUNC如果文件已存在,则将其长度截断(Truncate)为0字节
O_NONBLOCK设置文件为非阻塞状态
…
返回值:
成功:打开文件所得到的对应的文件描述符fd(整数)。
失败:-1,设置errno
常见错误:
- 打开文件不存在
- 以写方式打开只读文件(打开文件没有对应权限)
- 以只写方式打开目录
fopen与open的区别
以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回
close()函数
头文件:#include<unistd.h>
功能:关闭一个已经打开的文件
函数原型
int close(int fd);
参数:open函数的返回值
返回值:0表示正常关闭 -1关闭出现错误
打开的文件描述符一定要记得关闭,否则资源会被大量的占用,导致内存不够
示例:
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
int main(int argc, char* argv[])
{
int fd;
fd=open("./test.txt",O_RDONLY|O_CREAT|O_TRUNC,0777);
printf("fd = %d\n",fd);
close(fd);
return 0;
}
结果: fd = 3
参考:
1.参考黑马程序员linux系统编程资料
2. open函数详解
3. open函数详解与close函数详解