函数介绍

本文仅仅将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, or O_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函数使用相关推荐

  1. linux 系统函数调用脚本文件,Linux系统调用fsync函数详解

    Linux系统调用fsync函数详解 发布时间:2013-11-14 19:55:10   作者:佚名   我要评论 Linux fsync函数主要用于将同步内存中所有已修改的文件数据到储存设备,多用 ...

  2. linux磁盘同步函数,Linux系统调用fsync函数详解

    功能描述: 同步内存中所有已修改的文件数据到储存设备. 用法: #include int fsync(int fd); 参数: fd:文件描述词. 返回说明: 成功执行时,返回0.失败返回-1,err ...

  3. O_CREAT和O_RDWR进入linux系统调用open函数

    首先,linux内核的open函数是这么定义的SYSCALL_DEFINE3(open, ...),可以查到的宏定义为 #define SYSCALL_DEFINE3(name, ...) SYSCA ...

  4. uname命令 linux,Linux系统调用--uname()函数及系统下的uname命令

    [uname系统调用] 功能描述: 获取当前内核名称和其它信息. 用法: #include /* Put information about the system in NAME.  */ exter ...

  5. Linux系统调用--getrusage函数详解

    功能描述:    获得进程的相关资源信息.如:用户开销时间,系统开销时间,接收的信号量等等; 用法:   #include <sys/types.h>   #include <sys ...

  6. Linux系统调用之lseek函数

    前言 如果,想要深入的学习Linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的. 具体输入命令: man 2 lseek 即可查阅到完整的资料信息. lseek函数 lse ...

  7. Linux系统调用之execve函数与标准C库exec函数族(有关于进程方面的函数族)

    前言 如果,想要深入的学习Linux系统调用里面的execve函数与标准C库中的exec函数族,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 2 execve man 3 e ...

  8. linux ioctl root权限,Linux系统调用设备的ioctl函数

    Linux系统调用设备的ioctl函数 在命令行调用设备的ioctl函数.在Linux系统中,似乎对设备的直接操作只有ioctl函数了.他接受的参数不是太多,而且都是一一对应的. blockdev - ...

  9. linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解

    Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...

最新文章

  1. 【django轻量级框架】云端系统之Django框架进阶
  2. 简单尝试 express 使用 websocket
  3. css cursor 常用值
  4. 20201014 《计算感知》第2节课 笔记
  5. 思科配置计算机ip地址子网掩码,计算机系统与网络技术IP地址 子网掩码 主机号等计算复习...
  6. opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
  7. 前端面试题(重点整理):谈谈你对web标准和W3c的认识、什么是ECMA、什么是html、浏览器和开发工具介绍
  8. Replication的犄角旮旯(二)--寻找订阅端丢失的记录
  9. 【codeforces 340B】Maximal Area Quadrilateral
  10. 使用TSC打印机打印条码 (1)
  11. 利用imnoise2函数产生数据的直方图
  12. SM2258XT固态硬盘不认盘量产修复开卡工具,SM2258XT开卡教程
  13. LABjs、RequireJS、SeaJS 哪个最好用?为什么?
  14. 献给初学labview数据采集的初学者
  15. 设置透明主题引起动画失效以及打开其他应用闪现桌面图标的问题
  16. mtk系统定制注意事项—
  17. Vue3官网使用及简介
  18. 迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!
  19. 20美金 php,我的外盘期货交易成本只有20美金,为什么还会屡屡爆仓?
  20. 【转】[Qt教程] Qt串口通信全新专题

热门文章

  1. 关于如何在pc端使用github
  2. 牛腩44 整合登陆页 RequiredFieldValidator 和 ValidationSummary 以及 asp.net 自带的MD5 加密...
  3. ASP.NET禁用视图状态
  4. 最近用到的一些方法技巧
  5. centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)
  6. oracle rac ora 12537,解决11gR2 Rac ORA-12537: TNS:connection closed 一例
  7. java画出斜椭圆_【转】画图java源代码,只画直线,矩形,椭圆
  8. python开发视频播放器_python视频播放器
  9. sql列转行函数oracle,SQL列转行
  10. java栈 迷宫_利用栈实现迷宫的求解