linux open函数用法详解 如何打开或创建文件并设置权限
open函数
函数介绍
在Linux中open()函数用来打开或创建一个文件,当打开文件失败时返回值为-1;成功则返回作为文件描述符(一个非负的数值)。
头文件及函数原型
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //以上三个头文件都是open()所需的头文件 int open(const char *pathname, int flags);//只是打开或创建文件 int open(const char *pathname, int flags, mode_t mode);//打开或创建文件,并给文件赋权限
参数
| pathname | 打开的文件名或路径,路径用绝对路径 | ||
| flag | 标志 | 作用 | |
| O_RDONLY | 只读方式打开文件 | ||
| O_WDONLY | 只写方式打开文件 | ||
| O_RDWR | 读写方式打开文件 | ||
O _ NONBLOCK | 非阻塞方式打开文件 | ||
| O_CREAT | 文件不存在就创建 | ||
| O_EXCL | 与O_CREAT一起使用,判断文件是否存在。文件存在返回错误信息, | ||
| O_NOCTTY | 不让pathname所指向的终端成为控制终端 | ||
| O_TRUNC | 文件清0,若文件存在则文件内的内容将被清空 | ||
| O_APPEND | 添加方式打开文件,打开文件时,文件指针指向文件末尾,将写入数据添加到文末 | ||
O _ SYNC | 同步方式写入文件 | ||
O_DSYNC | 提供同步的I/O数据完整性 | ||
O _ ASYNC | 当I/O操作可行,产生信号通知进程 | ||
O _ DIRECT | 无缓冲输入输出 | ||
O _ DIRECTORY | 若不是目录,则失败 | ||
| mode | S_IRUSER | S_IWUSR | 设置文件所有者可读可写(即0600) 第一位数字0代表特殊权限(suid:4、sgid:2、sbit:1),不是八进制的意思。一般将其设置为0,即系统默认。 | |
| 一组宏定义:S_I(R/WX)(USR/GRP/OTH) | R(4):读 W(2):写 X(1):可执行 USR:文件所有者 GRP:文件所属组 OTH:其他所有者 | ||
在给文件赋权限时,在open函数中给的权限并不是文件真正的权限,还要与文件本地的掩码按位与之后的结果才是其真正的权限。通过umask可以获取本地的掩码或者修改本地的掩码。
其过程如下图所示。
修改本地俺码
umask 0023 //把本地的掩码修改成0023 /**************** *其中后面三个数字分别代表文件的所有者、所属组、其他用户的权限; *通过设置数字表示取消该用户对文件的权限;上述的2和3分别表示取消了 *用户所属组的写权限和其他用户对该文件写和执行权限。 *****************/

文件实际权限求法

close函数
函数介绍
close()顾名思义就是关闭文件,一般与open()函数一起使用。
每当打开、读写文件完成后都要使用close函数关闭文件。
头文件函数原型
#include <unistd.h> int close(int fd); //参数fd为文件描述符
open()、close()函数使用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> //前三个是open函数头文件
#include <unistd.h> //close头文件
#include <stdio.h> //perror头文件
#include <stdlib.h> //exit头文件
int main(){
int fd;
//定义一个文件描述符变量
//打开文件
//fd = open("hello.c",O_RDWR); //打开文件,若该文件没有则报错
//fd = open("hello.c",O_RDWR|O_CREAT,0777); //打开文件,没有则创建并给文件赋权限
//fd = open("hello.c",O_RDWR |O_CREAT | O_EXCL,0777 );
//参数O_EXCL用来判断文件是否存在,其必须与O_CREAT一起使用才能判断文件是否村在
//O_TRUNC将文件截断为零,即清空文件内容
fd = open("hello.c",O_RDWR |O_CREAT | O_TRUNC,0777 );
//打开文件失败
if (fd== -1){
perror("Open file error");
//通过errno函数的返回值,perror把提示信息和错误信息一起输出
exit(1);
}
printf("Create %d success!\n",fd);
close(fd); //关闭文件,fd为open函数返回的文件描述符
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Linux服务器配置ip白名单防止远程登录以及端口暴露的问题
今天小编就为大家分享一篇Linux服务器配置ip白名单防止远程登录以及端口暴露的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-07-07
Ubuntu 18.04 Server 设置静态IP 的方法
Netplan是Ubuntu 17.10中引入的一种新的命令行网络配置实用程序,用于在Ubuntu系统中轻松管理和配置网络设置。这篇文章主要介绍了Ubuntu 18.04 Server 设置静态IP 的方法,需要的朋友可以参考下2018-11-11


最新评论