2021-07-13Linux C开发学习笔记 -I/O技术

Linux C开发-I/O技术

  1. Linux文件类型分类
    1. :普通文件
    2. d:目录文件
    3. l:链接文件
    4. c:字符设备文件(键盘、串口)
    5. b:块设备文件(硬盘、CDROM)
    6. p:管道文件(pipe,缓冲文件)
    7. f:堆栈文件
    8. s:共享文件
  2. 文件描述符:
    1. 动态分配:只要当操作这个文件时,系统才会给你分配文件描述符
    2. 知道一个文件的id,操作这个id,等于操作这个文件
    3. 非负整数:存在0 1 2这三个文件描述符,所以动态分配文件描述符从3开始
      1. 程序开始运行时,有三个文件被自动打开:
      2. /dev/stdin:标准输入文件:STDIN_FILENO
      3. /dev/stdout:标准输出文件:STDOUT_FILENO
      4. /dev/stderr:标准出错输出文件:STDERR_FILENO(无缓冲)

3. 无缓冲访问文件(系统调用)

  1. 头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
  1. creat
    1. 函数原型:int creat(const char * pathname, mode_tmode);
      实例:creat(fd, S_IRUSR | S_IWUSR |
      S_IRWXG | S_IRWXO);
    2. 参数pathname指向欲建立的文件路径字符串
    3. 返回值:成功时返回新文件的描述符,失败返回-1
  2. open
    1. 函数原型:int open( const char * pathname, int flags);
      int open( const char * pathname, int flags, mode_t mode);
      实例:open(argv[1], O_RDWR | O_CREAT | O_APPEND, 0655)
    2. 参数pathname指向欲打开的文件路径字符串,下列是参数flags所常用的旗标:
      1. O_RDONLY:只读方式打
      2. O_WRONLY:只写方式打开
      3. O_RDWR:可读写方式打开
      4. O_CREAT:若欲打开的文件不存在,则自动建立该文件
      5. O_EXCL:检查文件是否存在。不存在则建立该文件,否则将导致打开文件错误
      6. O_TRUNC:若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,并清空文件内资料
      7. O_APPEND:读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面
    3. 返回值:成功时返回0值,失败返回-1
    4. 功能覆盖creat,所以一般直接使用open函数
    5. 注意事项:多次open同一文件,实现共享操作时,指定O_APPEND可以防止数据相互覆盖的发生
  3. write
    1. 函数原型:ssize_t write (int fd, const void * buf, size_t count);
      实例:write(fd, “hello\n”, 6);
    2. write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内,文件读写位置也会随之移动
    3. 返回值:成功时返回实际写入的字节数,失败返回-1
  4. read
    1. 函数原型:ssize_t read(int fd,void * buf ,size_t count);
      实例:read(fd, &temp, 1)
    2. 把参数fd所指的文件传送count个字节到buf指针所指的内存中,此外文件读写位置会随读取到的字节移动
    3. 返回值:成功时返回实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,有错误发生时则返回-1
  5. lseek
    1. lseek(int fildes,off_t offset ,int whence);
      实例:lseek(fd, 0, SEEK_END);
    2. 用来控制文件的读写位置。参数fildes为已打开的文件描述词;参数offset为根据参数whence来移动读写位置的位移数,参数whence为下列其中一种
      1. SEEK_SET:参数offset即为新的读写位置
      2. SEEK_CUR:以目前的读写位置往后增加offset个位移量
      3. SEEK_END:将读写位置指向文件尾后再增加offset个位移
    3. 返回值:成功时返回目前的读写位置,也就是距离文件开头多少个字节;否则返回-1
  6. close
    1. 函数原型:int close(int fd);
    2. close()用来关闭open()打开的文件
    3. 返回值:成功时返回0,有错误发生时则返回EOF
    4. 注:有open()就要有close()释放空间
  7. fcntl
    1. 函数原型:int fcntl(int fd, int cmd, … /* arg */ );
    2. fd指向打开的文件,cmd代表控制命令,通过指定不同的宏来修改fd所指向文件的性质,通过fcntl可以设置、或者修改已打开的文件性质
      1. F_DUPFD
      2. F_GETFL、F_SETFL
      3. F_GETFD、F_SETFD
      4. F_GETOWN、F_SETOWN
      5. F_GETLK或F_SETLK或F_SETLKW
    3. 返回值:成功时返回值视具体参数而定,失败则返回-1
  8. ioctl
    1. 函数原型:int ioctl(int fd, ind cmd, …);
    2. fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,ioctl是设备驱动程序中对设备的I/O通道进行管理的函数,设备的一些特性进行控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值