首页 > linux 系统调用 open函数使用

linux 系统调用 open函数使用

函数介绍

本文仅仅将open系统调用的使用简单总结一下,关于其实现原理大批的大佬分享可以自行学习。open系统调用主要用于打开或者创建一个文件,并返回文件描述符。

  • 头文件 #include
  • 函数名称

    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 
#include 
#include 
#include 
#include 
#include int main(int argc, char *argv[])
{ int fd;if (argc < 2) { printf("./a.out filename 
");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
",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

更多相关:

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • setuid 和 setgid (全称分别是:set user ID upon execution 和 set group ID upon execution)是Unix的访问权限标志位,它允许 用户以可执行文件owner或group的权限来运行这个可执行文件。它们经常适用于:为了运行特定的任务,可以允许用户暂时的提高权限。用处: 暂...

  • 1. 权限管理命令:chmod 命令名称:chmod命令英文原意:change the permissions mode of a file命令所在路径:/bin/chmod执行权限:所有用户语法: chmod [{ugoa} {+-=} {rwx}] [文件或目录] [mode=421] [文件或目录]功能描述:改变文件或目录权限...

  • 权限系统通常包括如下基本元素:用户、角色、权限、资源、操作。 角色分类:总经理、部长、员工。(在实际中一个用户可能存在多个角色,这就要考虑到权限累加处理) 权限分类:如”员工考勤权限”、”审核权限”等等。 在给角色分配权限过程中,可以批量分配权限,也可以单一处理,比如网站首页,这就应该开放给所有角色,而审核考勤就只能给部分角色有开放...

  • 创建用户create user –概述:在oracle中要创建一个新的用户使用 create user 语句,一般是具有dba(数据库管理员)的权限才能使用。 –基本语法:create user 用户名 identified by 密码 create user dbuser1 identified by dbuser1;   用户赋权...

  • 本节讲解一下Windows下SVN权限配置说明,针对的是一个目录下多库的情况,下面是具体的介绍,希望通过本文的学习,你能够对SVN权限配置问题有更加深刻的认识。 1、本文档适用于对Subvesion的自带服务svnserve进行权限配置,全部在authz文件中完成。 2、如果要对含有中文的目录或文件进行管理或分配时,需要将该文件保存为...

  • 关于点云的分割算是我想做的机械臂抓取中十分重要的俄一部分,所以首先学习如果使用点云库处理我用kinect获取的点云的数据,本例程也是我自己慢慢修改程序并结合官方API 的解说实现的,其中有很多细节如果直接更改源程序,可能会因为数据类型,或者头文件等各种原因编译不过,会导致我们比较难得找出其中的错误,首先我们看一下我自己设定的一个场景,...

  • /* 使用正态分布变换进行配准的实验 。其中room_scan1.pcd room_scan2.pcd这些点云包含同一房间360不同视角的扫描数据 */ #include #include #include #include

  • #include #include #include #include ...

  • #include #include #include #include #include #include...

  • #include #include #include #include int main (int argc,...