1. 标准文件描述符定义在<unistd.h>中,STDIN_FILENO,  STDOUT_FILENO,  STDERR_FILENO
  2. 打开一个文件:open()

#include<sys/stat.h>

#include<fcntl.h>

int open(const char *pathname, int flags, …/* mode_t mode*/);

(1)调用发生错误,open返回-1,并将errno设置为相应的错误标志。

(2)flags为位掩码,用于指定文件的访问模式,O_CREATE ,O_RDONLY, O_WRONLY,  O_RDWR,O_APPEND;   注:因是位掩码,O_RDWR不等同于O_RDONLY|O_WRONLY

(3)mode为位掩码,用于指定文件的访问权限。如果open  flags参数并没有指定O_CREATE标志,则可以省略mode参数。

  1. O_EXCL,此标志与O_CREATE标志结合使用表明如果文件已经存在,则不会打开文件,且open()调用失败,返回错误,errno为EEXIST。换言之,此标志确保了调用者(open()的调用进程)就是创建文件的进程。
  2. 读取文件内容:read()

#include<unistd.h>

ssize_t read(int fd, void * buffer, size_t count);

(1)如果read()调用成功,将返回实际读取的字节数,如遇到文件结束(EOF)则返回0

(2)从终端读取字符,一遇到换行符(\n),read()调用就会结束。

  1. 数据写入文件:write()

#include<unistd.h>

ssize_t write(int fd, void * buffer, size_t count);

write()调用成功,将返回实际写入文件的字节数

  1. 关闭文件:close()

#include<unistd.h>

int close(int fd);

close()可能执行失败:企图关闭一个未打开的文件描述符;或者两次关闭同一个文件描述符。

  1. size_t: 无符号整数类型;          ssize_t:有符号的整数类型;
  2. 改变文件偏移量:lseek()

#include<unistd.h>

off_t lseek(int fd, off_t offset, int whence);

(1)文件第一个字节的偏移量为0

(2)offset:指定一个以字节为单位的数值, off_t:有符号整形数

(3)whence:表明应参照哪个基点来解释offset参数。

SEEK_SET: 将文件偏移量设置为从文件头部起始点开始的offset个字节

SEEK_CUR: 相对于当前文件偏移量,将文件偏移量调整offset个字节

SEEK_END: 将文件偏移量设置为起始于文件尾部的offset个字节,也就是说,offset参数应该从文件最后一个字节之后的下一个字节算起

(4)lseek()调用成功会返回新的文件偏移量。

(5)lseek()并不适用于所有类型的文件。不允许将lseek()应用于管道、FIFO、socket或者终端,一旦如此,errno返回ESPIPE

  1. 通用I/O模型以外的操作:ioctl()

#include<sys/ioctl.h>

int ioctl(int fd, int request, …/*argp*/);

(1) request: 指定了将在fd上执行的控制操作。具体设备的头文件定义了可传递给request参数的常量。

(2)ioctl根据request的参数值来确定argp所期望的类型。通常情况下,argp是指向整数或结构的指针。有些情况,不需要使用argp

(3)ioctl在5350上用于对于芯片的管脚进行I/O设置。常规使用场景是open-->ioctl-->close

Linux编程手册读书笔记第四章(20140407)相关推荐

  1. Linux编程手册读书笔记第三章(20140407)

    外壳函数执行一条中断机器指令(int 0x80),引发处理器从用户态切换到核心态,并执行系统中断0x80的中断矢量所指向的代码.(在2.6内核及glib 2.3.2之后的版本都支持sysenter指令 ...

  2. Linux编程手册读书笔记第五章(20140408)

    改变已打开文件性质:fcntl() #include<fcntl.h> int fcntl(int fd, int cmd, -); (1)  调用失败返回-1 (2)fcntl函数有5种 ...

  3. Linux编程手册读书笔记第二章(20140330)

    内核:管理和分配计算机资源(即CPU.RAM和设备)的核心软件层 Linux内核可执行文件采用/boot/vmlinuz或类似的路径名,"z"表明内核是经过压缩的可执行文件. 内核 ...

  4. linux编程手册读书笔记第一章(20140329)

    (2)管道.FIFO.套接字.设备(比如终端.伪终端)都支持非阻塞模式.(因为无法通过open()来获取管道和套接字的文件描述符.所以要启用非阻塞标志,就必须使用fcntl()的F_SETFL命令) ...

  5. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  6. 读书笔记 第四章 创造力

    读书笔记 第四章 创造力 创造性工程师的特点 创造性工程师一般具有以下特点: 1.坚持不懈 寻找问题的创造性解决方案需要不断的努力.在工作中总会遇到各种各样的问题,一个成功的创造性工程师永不会放弃.托 ...

  7. 《Beginning Linux Programming》读书笔记(四)

    1, 读写空指针 先看第一种情况,printf试图访问空指针,以打印出字符串,而sprintf试图向空指针写入字符串,这时,linux会在GNU C函数库的帮助下,允许读空指针,但不允许写空指针. 复 ...

  8. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  9. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy ...

最新文章

  1. 导师神总结:读博失败的10个作死大法
  2. 单片机串口输入c语言,单片机通过串口与电脑连接通信C语言源代码
  3. dot pairs 点_Dott入局欧洲共享单车市场 明年3月伦敦巴黎推出
  4. windows如何调用Linux的API,Windows和Native API中的系统调用?
  5. mysql二进制方式_MySQL数据库之MySql二进制连接方式详解
  6. Pentium 4处理器架构/微架构/流水线 (8) - NetBurst执行核详解 - 指令时延与吞吐量
  7. 确定一个整数是否是2的幂
  8. python if 语句第一个不程序_python小程序1--if语句
  9. Prism 文档 第三章 管理组件之间的依赖关系
  10. 红外红外传感器电路图及工作原理
  11. 从0开始的视频特效制作之路
  12. 最好用的五个黑科技搜索引擎推荐
  13. Linux运维养成记-磁盘管理LVM 逻辑卷
  14. Java通俗易懂30天 第1天: Java语言概述
  15. Unity之新版输入系统InputSystem如何自定义InputActions
  16. BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡
  17. 20款Adobe AIR小游戏
  18. 数据仓库工程师基本技能
  19. 微信对话框删除后怎么找回聊天记录?
  20. Python--变量

热门文章

  1. jenkins-基础配置
  2. maven project module 依赖项目创建 ---转
  3. 2017-2018-1 Java演绎法 第三周 作业
  4. SpringMVC整合MongoDB
  5. Android N 新特性 + APP开发注意事项
  6. Python进阶06 循环对象
  7. Android 广播机制以及用法详解 (转)
  8. tfs 内网和外网切换的方法。
  9. IE Mobie6清除浮动
  10. CLI下的网页浏览器之二——Lynx