linux 系统调用 open函数使用
函数介绍
本文仅仅将open
系统调用的使用简单总结一下,关于其实现原理大批的大佬分享可以自行学习。open系统调用主要用于打开或者创建一个文件,并返回文件描述符。
- 头文件
#include <fcntl.h>
- 函数名称
a.int open(const char *pathname, int flags);
b.int open(const char *pathname, int flags, mode_t mode);
以上两个函数参数含义如下:
- pathname 字符串类型的文件名称,“a.txt”
- flags 为 以什么样的方式打开文件,主要包括三种
O_RDONLY
,O_WRONLY
, orO_RDWR
,分别是只读方式,只写方式以及读写方式。
此外还有更多的打开方式的标记,可以通过man open
命令详细查看 - mode 为打开文件时赋予的文件用户,用户组权限
可以通过设置0777
八进制这种方式来设置,也可以通过S_IRWXU
类型 的标准mode来设置。标准用户权限模式如下几种,该权限的设置可以通过|
符号来叠加
a.S_IRWXU
00700文件拥有者读,写,可执行权限
b.S_IRUSR
00400 文件拥有者读权限
c.S_IWUSR
00200 文件拥有者写权限
d.S_IXUSR
00100 文件拥有者可执行权限
e.S_IRWXG
00070 文件用户组读,写,可执行权限
f.S_IRGRP
00040 文件用户组读权限
g.S_IWGRP
00020 文件用户组写权限
h.S_IXGRP
00010 文件用户组可执行权限
i.S_IRWXO
00007 其他用户读,写,执行权限
j.S_IROTH
00004 其他用户读权限
k.S_IWOTH
00002 其他用户写权限
l.S_IXOTH
00001 其他用户可执行权限
返回值 操作系统会为当前进程从3开始分配一个未使用的文件描述符,因为0,1,2已经被stdin
,stdout
,stderr
三个默认打开的文件占用。
函数使用
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>int main(int argc, char *argv[])
{int fd;if (argc < 2) {printf("./a.out filename \n");exit(1);}umask(0);//这里关于文件不存在,则创建时赋予文件的权限两种方式是一样的,这里赋予的是00770权限//fd=open(argv[1],O_CREAT | O_RDWR, S_IRWXU|S_IRWXG);fd=open(argv[1],O_CREAT | O_RDWR, 0770);printf("%d\n",fd);close(fd);return 0;
}
输出如下:
zhang@ubuntu:~/test$ gcc test_open.c
zhang@ubuntu:~/test$ ./a.out test.txt
3
zhang@ubuntu:~/test$ ls -l test.txt
-rwxrwx--- 1 zhang zhang 0 Sep 15 03:37 test.txt
linux 系统调用 open函数使用相关推荐
- linux 系统函数调用脚本文件,Linux系统调用fsync函数详解
Linux系统调用fsync函数详解 发布时间:2013-11-14 19:55:10 作者:佚名 我要评论 Linux fsync函数主要用于将同步内存中所有已修改的文件数据到储存设备,多用 ...
- linux磁盘同步函数,Linux系统调用fsync函数详解
功能描述: 同步内存中所有已修改的文件数据到储存设备. 用法: #include int fsync(int fd); 参数: fd:文件描述词. 返回说明: 成功执行时,返回0.失败返回-1,err ...
- O_CREAT和O_RDWR进入linux系统调用open函数
首先,linux内核的open函数是这么定义的SYSCALL_DEFINE3(open, ...),可以查到的宏定义为 #define SYSCALL_DEFINE3(name, ...) SYSCA ...
- uname命令 linux,Linux系统调用--uname()函数及系统下的uname命令
[uname系统调用] 功能描述: 获取当前内核名称和其它信息. 用法: #include /* Put information about the system in NAME. */ exter ...
- Linux系统调用--getrusage函数详解
功能描述: 获得进程的相关资源信息.如:用户开销时间,系统开销时间,接收的信号量等等; 用法: #include <sys/types.h> #include <sys ...
- Linux系统调用之lseek函数
前言 如果,想要深入的学习Linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的. 具体输入命令: man 2 lseek 即可查阅到完整的资料信息. lseek函数 lse ...
- Linux系统调用之execve函数与标准C库exec函数族(有关于进程方面的函数族)
前言 如果,想要深入的学习Linux系统调用里面的execve函数与标准C库中的exec函数族,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 2 execve man 3 e ...
- linux ioctl root权限,Linux系统调用设备的ioctl函数
Linux系统调用设备的ioctl函数 在命令行调用设备的ioctl函数.在Linux系统中,似乎对设备的直接操作只有ioctl函数了.他接受的参数不是太多,而且都是一一对应的. blockdev - ...
- linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
最新文章
- 【django轻量级框架】云端系统之Django框架进阶
- 简单尝试 express 使用 websocket
- css cursor 常用值
- 20201014 《计算感知》第2节课 笔记
- 思科配置计算机ip地址子网掩码,计算机系统与网络技术IP地址 子网掩码 主机号等计算复习...
- opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
- 前端面试题(重点整理):谈谈你对web标准和W3c的认识、什么是ECMA、什么是html、浏览器和开发工具介绍
- Replication的犄角旮旯(二)--寻找订阅端丢失的记录
- 【codeforces 340B】Maximal Area Quadrilateral
- 使用TSC打印机打印条码 (1)
- 利用imnoise2函数产生数据的直方图
- SM2258XT固态硬盘不认盘量产修复开卡工具,SM2258XT开卡教程
- LABjs、RequireJS、SeaJS 哪个最好用?为什么?
- 献给初学labview数据采集的初学者
- 设置透明主题引起动画失效以及打开其他应用闪现桌面图标的问题
- mtk系统定制注意事项—
- Vue3官网使用及简介
- 迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!
- 20美金 php,我的外盘期货交易成本只有20美金,为什么还会屡屡爆仓?
- 【转】[Qt教程] Qt串口通信全新专题
热门文章
- 关于如何在pc端使用github
- 牛腩44 整合登陆页 RequiredFieldValidator 和 ValidationSummary 以及 asp.net 自带的MD5 加密...
- ASP.NET禁用视图状态
- 最近用到的一些方法技巧
- centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)
- oracle rac ora 12537,解决11gR2 Rac ORA-12537: TNS:connection closed 一例
- java画出斜椭圆_【转】画图java源代码,只画直线,矩形,椭圆
- python开发视频播放器_python视频播放器
- sql列转行函数oracle,SQL列转行
- java栈 迷宫_利用栈实现迷宫的求解