目录

1.句柄(file descriptor 简称fd)

2.使用open前需要先包含头文件

3.参数说明

3.1 参数1(pathname)

3.2 参数2(flags)

3.3 参数3(mode)

4. 用法示例


open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄。

int fd = open(参数1,参数2,参数3);int fd = open(const char *pathname,int flags,mode_t mode);

1.句柄(file descriptor 简称fd)

首先每个文件都属于自己的句柄,例如标准输入是0,标准输出是1,标准出错是2。

每打开一个文件就会返回句柄来操作这个文件,一般是从3开始,然后4,5,6一直下去。

close(fd)之后句柄就返回给系统,例如打开一个文件后fd是3,close之后再打开另外一个文件也还是3,但代表的文件不一样了。

2.使用open前需要先包含头文件

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>

3.参数说明

int fd = open(const char *pathname,int flags,mode_t mode);

3.1 参数1(pathname)

即将要打开的文件路径,例如:“a.txt”当前目录下的a.txt文件

3.2 参数2(flags)

flags分为两类:主类,副类

主类:

O_RDONLY 以只读方式打开

O_WRONLY 以只写方式打开

O_RDWR 以可读可写方式打开

这三种方式是互斥的。

副类:

O_CREAT 如果文件不存在则创建该文件

O_EXCL 如果使用O_CREAT选项且文件存在,则返回错误消息

O_NOCTTY 如果文件为终端,那么终端不可以调用open系统调用的那个进程的控制终端

O_TRUNC 如果文件已经存在则删除文件中原有数据

O_APPEND 以追加的方式打开

主副可以配合使用,例如:O_RDWR|O_CREAT|O_TRUNC

3.3 参数3(mode)

mode:如果文件被新建,指定其权限未mode。

mode是八进制权限码,0777表示文件所有者。该文件用户组,其他用户都有可读可写可执行权限。

4. 用法示例

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>int main()
{int fd;//创建新文件    fd=open("myhello",O_RDWR | O_CREAT,0777);if(fd == -1){perror("open file");exit(1);}printf("fd = %d\n",fd);int ret = close(fd);printf("ret = %d\n",ret);if(ret == -1){perror("close file");exit(1);}
}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>int main()
{int fd;//创建新文件判断是否存在    fd=open("myhello",O_RDWR | O_CREAT | O_EXCL,0777);if(fd == -1){perror("open file");exit(1);}printf("fd = %d\n",fd);int ret = close(fd);printf("ret = %d\n",ret);if(ret == -1){perror("close file");exit(1);}
}

原文链接:https://blog.csdn.net/weixin_39296438/article/details/79422068

linux系统编程下的open函数使用方法相关推荐

  1. Linux系统编程 37 -makefile2个函数和clean

    Linux系统编程 37 -makefile2个函数和clean 学习笔记 一个makefile 就是用一个个规则凑在一起 2个函数 wildcard patsubst wildcard 百搭牌,通配 ...

  2. Linux C编程下没有 itoa()函数的问题

    用ubuntu linux c编程,发现Linux内核中只有atoi()函数,被包含在stdlib.h头文件中,而没有itoa()函数,网上查了有一个实现了itoa()函数的代码 void itoa ...

  3. linux系统编程之信号(signal)的使用方法案例

    信号处理过程: 中断源->中断屏蔽->保护现场->中断处理程序->中断恢复 信号称为软中断 //kill -l 查看所有signal信号 共计64个信号 //man 7 sig ...

  4. linux系统编程3—文件存储函数

    文章目录 1.innode 2.dentry 3.stat函数 4.lstat函数 5.access函数.chmod函数.truncate函数 6.link函数 7.unlink函数 unlink的特 ...

  5. Linux系统编程.NO7——目录操作函数

    5. 目录文件管理函数 5.1. 目录文件概念 目录在Linux中也是文件,也有对应的文件指针,每次读目录之前也要先打开目录,然后目录指针就出现了,第一次读就是第一个文件的信息,然后第二次读就是第二个 ...

  6. linux系统编程3-read、lseek函数

    //read函数原型:ssize_t read(int fd, void *buf, size_t count); //lseek函数原型:off_t lseek(int fd, off_t offs ...

  7. Linux系统编程下做一个简易的shell

    自主实现一个shell--------minshell shell:命令行解释器-------解释执行用户的输入(完成相对应的功能) 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls ...

  8. 嵌入式学习之linux系统编程----1 了解linux编程并且在ubuntu以及ARM上运行测试程序

    1.何为linux系统编程? linux系统编程也称为linux下的高级编程,它介于应用层与驱动层之间. 一般来说分为三个层面,分别是:应用层(写一个qt程序或者c程序就属于是应用层面).驱动层(比如 ...

  9. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

最新文章

  1. 2022-2028年中国免疫诊断行业市场前瞻与投资战略规划分析报告
  2. 使用Repeater的Template
  3. 计算机网络课程复习大纲
  4. JavaScript 的垃圾回收与内存泄露
  5. Apache主配置文件httpd.conf 详解
  6. 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%
  7. JavaScript:undefined And null差异
  8. Effective Java之用实例域代替序数(三十一)
  9. 2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】
  10. 730阵列卡支持多大硬盘_华为1000多手机哪款好?推荐只此一款!华为品牌性价比最高千元机...
  11. mysql5.6开启memcache_php – 使用MYsql 5.6 Memcache
  12. 实现option上下移动_JS实现Select的option上下移动的方法
  13. “离开 360 时,它只给了我一块钱”
  14. [Windows] 一些简单的CMD命令
  15. VS2015,C++MFC建立可视化界面第一天
  16. Maven安装与配置(详细步骤)
  17. python调用perl_python调用perl脚本
  18. Tomcat,Servlet,JSP之间是什么关系?
  19. 第1章 Dev C++的使用
  20. C++继承问题(白兰花例)

热门文章

  1. windows定时备份mysql数据库并自动压缩
  2. 色彩管理软件如何有测色色差仪链接
  3. Kotlin学习笔记--Kotlin之集合
  4. Linux下使用百度云盘
  5. 秒杀系统练习及问题总结——Dao层
  6. JavaScript 的黑暗时刻来了?
  7. IPS(入侵防护系统)与WAF(Web应用防护系统)的区别
  8. 微信小程序-----滚动字幕
  9. 基于OpenStack和Kubernetes构建组合云平台——网络集成方案综述
  10. P2894 USACO08FEB HOTEL G