一、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相关推荐

  1. linux 系统调用 hook 总结

    1. 系统调用Hook简介 系统调用属于一种软中断机制(内中断陷阱),它有操作系统提供的功能入口(sys_call)以及CPU提供的硬件支持(int 3 trap)共同完成. 我们必须要明白,Hook ...

  2. Linux系统调用的实现机制分析

    [摘要]本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口有怎样的关系.然后,我们考察了内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和 ...

  3. linux系统调用挂钩方法总结

    相关学习资料 http://xiaonieblog.com/?post=121 http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing- ...

  4. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

  5. Linux系统调用FAQ

    1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1.    ...

  6. 64位汇编之linux系统调用

    linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...

  7. Linux系统调用及其效率

    操作系统相关概念: 操作系统---管理计算机硬件与软件资源的软件,是用户与系统操作交互的接口,为在它上面运行的程序提供服务. 操作系统内核 ----操作系统的核心.负责管理系统的进程.内核.设备驱动程 ...

  8. linux系统调用理解之摘录(3)

    Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...

  9. linux系统调用理解之摘录(2)

    原文博客 http://blog.csdn.net/gatieme/article/details/50779184 Linux系统调用的实现机制分析 本文介绍了系统调用的一些细节. 首先,分析了系统 ...

  10. 使用 Linux 系统调用的内核命令图解

    http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 使用 Linux 系统调用的内核命令

最新文章

  1. 牛客网刷题(纯java题型 181~210题)
  2. Android socket 编程 实现消息推送(二)
  3. 阿里的STORM——JSTORM
  4. PHP 5.6.30连接SAP GUI 730 配置(SAPRFC)
  5. 攻防世界-Misc-What-is-this(简单易懂)
  6. Linux OpenGL 实践篇-2 创建一个窗口
  7. maven项目 Java compiler level does not match the version of the installed Java project facet
  8. Spring-web-RequestContextHolder/RequestAttributes/HttpServletRequest
  9. xcode6 怎样下载ios7模拟器
  10. C语言学习心得 Caiwentao
  11. 绩效管理-目标拆解技巧
  12. python信用卡管理源码_Python随机生成信用卡卡号的实现方法
  13. windows机器硬盘不能超过2T详解及图文破解方法
  14. 用php做滚动,用PHP+java实现自动新闻滚动窗口
  15. linux使用命令查看MAC地址
  16. rke 部署的时候报错:Failed to set up SSH tunneling for host
  17. android将pdf文件转换成Bitmap,并将bitmap以图片的 方式保存到相册。
  18. 设计师的AI自学之路:用图像识别玩忍术
  19. 内置函数 - getattr()函数
  20. 长时间戴耳机耳朵不舒服?骨传导耳机可以缓解这个问题

热门文章

  1. 安装matlab应用程序遇到意外错误并且需要关闭。您可能需要尝试重新安装产品。有关详细信息,请查看C:\user\name\AppData\Local\Temp\mathworks_name.log
  2. Qt 判断字符串是否为数字
  3. 使用模拟器抓WX小程序包
  4. 《kafka 核心技术与实战》课程学习笔记(六)
  5. 英文原著书籍下载和英语歌曲下载
  6. 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解
  7. HTTP协议头部与Keep-Alive模式详解
  8. 利用Python提取avi视频每帧图像并保存
  9. ACDSee 2020正式发布!HDR,焦点堆栈、人脸识别等新功能抢先看
  10. waf+Nginx+apache获取真实ip