文件读取

    如上, cat 接受一个命令行参数——被读取文件路径,打开并读取文件,最后将文件内容输出到标准输出。如果文件不存在, cat 命令提示错误并退出。

    精简版 cat 命令源码如下:

    cat.c

    这是一个非常简短的程序,代码逻辑都在 main 函数里。

    17-21 行处,调用 open 系统调用打开文件。open 系统调用返回一个 文件描述符 ,后续可以通过该描述符操作文件。

    如果文件打开失败, open 将返回 -1 ,程序需要对异常情况进行处理。导致打开文件的原因又很多,例如:文件不存在;抑或权限不足等等。

    注意到,我们以只读模式打开文件—— flags 参数为 O_RDONLYflags 参数用于指定不同的访问模式,可以是以下三者之一:

    • O_RDONLY ,只读模式
    • O_RDWR ,读写模式

    更多关于 open 系统调用使用方法,请参考 。这是一份唾手可得的编程文档:

    24-44 行,在一个循环内不停读取文件并写到标准输出,直到文件读完。

    read 需要传入 3 个参数: 文件描述符缓冲区地址 以及 读取字节数 (受缓冲区限制)。read 返回值为零,意味着文件读取完毕,可以退出循环。

    同样,更多关于 read 系统调用使用方法,请参考 read(2) - Linux manual page

    46 行,在程序退出前,关闭文件描述符。其实,这个步骤可以省略,因为程序退出时,内核会关闭其所有文件描述符。

    订阅更新,获取更多学习资料,请关注我们的 :

    小菜学编程

    参考文献

    • 微信打赏