系统级I/O

一. 各种I/O函数

输入/输出是在主存和外部设备之间拷贝数据的过程。下图是本文讨论的各种I/O之间的关系。
Unix I/O模型是在操作系统内核中实现的,较高级的I/O都是基于Unix I/O函数来实现的。
在这里插入图片描述本文主要介绍几种Unix I/O 函数

二.Unix I/O 函数

1、打开/关闭函数

打开文件函数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) pathname:带路径的文件名
    2) flags:打开文件的标志,可以使用位或的我形式添加一下成员:
    O_WRONLY :只写权限
    O_RDONLY :只读权限
    O_RDWR :可读可写权限
    以上三个标志必须并且只能选择其中一个!
    可以位或一下几个:
    O_APPEND :追加方式 写数据到文件末尾。
    O_CREAT :创建标志,如果文件不存在就创建,存在则打开。
    O_EXCL :该标志一般与O_CREAT一起使用,用来测试文件是否存在,如果存在且是一个普通文件则报错,如果不存在则创建!
    O_NONBLOCK :非阻塞方式打开文件。
    O_TRUNC :截断标志 假如文件存在且是一个普通文件,而且打开的方式是O_RDWR 或者O_WRONLY,那么文件就会被清空。
    3) mode :指定了新文件的访问权限位,这些位的符号名字如下图所示。
    在这里插入图片描述
    前两个参数是第一个open函数和第二个函数共有的参数,第三个参数只有当第二个参数flags中有O_CREAT 时才有意义。

关闭函数close的原型:

#include<unistd.h>
int close(int fd)
  • 参数:需要关闭的文件描述符。

  • 返回值: 成功返回0,失败返回-1;

最后,进程调用close函数关闭一个已打开文件。关闭一个已关闭的描述符会出错

2、读写一个文件

读文件函数read的原型:

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
  • 功能:从文件描述符fd所指的文件中读取count个字节的数据到buf所指的内存中。
  • 参数
    1)fd: 文件描述符 open的返回值。
    2)buf:存储读取数据的内存的首地址。
    3)count: 读取数据的大小。
  • 返回值:成功返回读取到数据的字节数,失败返回-1;
    返回值 >0 说明读取到了数据 并且数据大小就是 返回值的大小。
    =0 说明文件已经读完了。
    <0 说明出错了。

写文件函数write的原型:

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
  • 功能:将buf所指的内存中的count个字节的数据写入到fd这个文件中。
  • 参数
    1)fd 文件描述符 open的返回值。
    2)buf 存储写入数据的内存的首地址。
    3)count 写入数据的大小。
  • 返回值: 成功返回 ,成功写入数据的大小;失败返回 -1;
    返回值 >0 说明写入了返回值大小的数据。
    =0 说明什么东西都没写进去。
    <0 写入失败;最典型的写入失败就是没有权限操作时的写入。

3、定位

lseek函数原型:

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • 参数:fd 文件描述符。
  • offset: 偏移量。
  • whence :从哪里开始偏移 ,有以下三个取值:
    SEEK_SET :从文件头开始偏移 此时 offset只能为正。
    SEEK_END :从尾巴开始偏移。
    SEEK_CUR :从当前位置开始偏移,偏移量可正可负,正为向后偏移,负为向前偏移。
  • 返回值:成功返回当前光标位置相对于文件头的距离;失败返回-1。

4、删除一个空目录或者普通文件

remove函数原型:

#include <stdio.h>
int remove(const char *pathname);
  • 功能:删除一个普通文件或空目录。
  • 参数:带路径的文件名或空目录名。
  • 返回值:成功返回0,失败返回-1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值