Linux系统调用之open, close
一、open函数可以打开或创建一个文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);返回值:成功返回新分配的文件描述符,出错返回-1并设置errno
pathname
参数是要打开或创建的文件名,和fopen一样,pathname既可以是相对路径也可以是绝对路径。
flags
参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来,所以这些常数的宏定义都以O_开头,表示or。
必选项:以下三个常数中必须指定一个,且仅允许指定一个。1、O_RDONLY 只读打开2、O_WRONLY 只写打开3、O_RDWR 可读可写打开以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags参数。1、O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。2、O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode,表示该文件的访问权限。3、O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。4、O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。5、O_NONBLOCK 对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O(Nonblock I/O)。
mode
指定文件权限,可以用八进制数表示,比如0644表示-rw-r–r–,也可以用S_IRUSR、S_IWUSR等宏定义按位或起来表示,详见open(2)的Man Page。要注意的是,文件权限由open的mode参数和当前进程的umask掩码共同决定。
二、close函数关闭一个已打开的文件。
#include <unistd.h>
int close(int fd);
返回值:成功返回0,出错返回-1并设置errno
参数fd是要关闭的文件描述符。需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。但是对于一个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越多,会占用大量文件描述符和系统资源。
简单实例:
#include <error.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{int fd = open("./test", O_RDWR | O_CREAT, 0666);if (fd == -1)perror("open file error");close(fd);return 0;
}
Linux系统调用之open, close相关推荐
- linux 系统调用 hook 总结
1. 系统调用Hook简介 系统调用属于一种软中断机制(内中断陷阱),它有操作系统提供的功能入口(sys_call)以及CPU提供的硬件支持(int 3 trap)共同完成. 我们必须要明白,Hook ...
- Linux系统调用的实现机制分析
[摘要]本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口有怎样的关系.然后,我们考察了内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和 ...
- linux系统调用挂钩方法总结
相关学习资料 http://xiaonieblog.com/?post=121 http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing- ...
- 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...
- Linux系统调用FAQ
1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1. ...
- 64位汇编之linux系统调用
linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...
- Linux系统调用及其效率
操作系统相关概念: 操作系统---管理计算机硬件与软件资源的软件,是用户与系统操作交互的接口,为在它上面运行的程序提供服务. 操作系统内核 ----操作系统的核心.负责管理系统的进程.内核.设备驱动程 ...
- linux系统调用理解之摘录(3)
Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...
- linux系统调用理解之摘录(2)
原文博客 http://blog.csdn.net/gatieme/article/details/50779184 Linux系统调用的实现机制分析 本文介绍了系统调用的一些细节. 首先,分析了系统 ...
- 使用 Linux 系统调用的内核命令图解
http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 使用 Linux 系统调用的内核命令
最新文章
- 牛客网刷题(纯java题型 181~210题)
- Android socket 编程 实现消息推送(二)
- 阿里的STORM——JSTORM
- PHP 5.6.30连接SAP GUI 730 配置(SAPRFC)
- 攻防世界-Misc-What-is-this(简单易懂)
- Linux OpenGL 实践篇-2 创建一个窗口
- maven项目 Java compiler level does not match the version of the installed Java project facet
- Spring-web-RequestContextHolder/RequestAttributes/HttpServletRequest
- xcode6 怎样下载ios7模拟器
- C语言学习心得 Caiwentao
- 绩效管理-目标拆解技巧
- python信用卡管理源码_Python随机生成信用卡卡号的实现方法
- windows机器硬盘不能超过2T详解及图文破解方法
- 用php做滚动,用PHP+java实现自动新闻滚动窗口
- linux使用命令查看MAC地址
- rke 部署的时候报错:Failed to set up SSH tunneling for host
- android将pdf文件转换成Bitmap,并将bitmap以图片的 方式保存到相册。
- 设计师的AI自学之路:用图像识别玩忍术
- 内置函数 - getattr()函数
- 长时间戴耳机耳朵不舒服?骨传导耳机可以缓解这个问题
热门文章
- 安装matlab应用程序遇到意外错误并且需要关闭。您可能需要尝试重新安装产品。有关详细信息,请查看C:\user\name\AppData\Local\Temp\mathworks_name.log
- Qt 判断字符串是否为数字
- 使用模拟器抓WX小程序包
- 《kafka 核心技术与实战》课程学习笔记(六)
- 英文原著书籍下载和英语歌曲下载
- 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解
- HTTP协议头部与Keep-Alive模式详解
- 利用Python提取avi视频每帧图像并保存
- ACDSee 2020正式发布!HDR,焦点堆栈、人脸识别等新功能抢先看
- waf+Nginx+apache获取真实ip