文件写入

    同样,我们还是通过实现一个简单的写文件程序 write 来学习相关 的使用方法。write 程序用法如下:

    程序接收两个命令行参数—— 待写入文件路径 以及 写入内容 (字符串)。程序负责打开待写入文件并写入指定内容,最后提示成功写入字节数。

    程序源码 write.c 如下:

    write.c

    18-22 行,调用 系统调用,打开待写入文件。open 系统调用需要 3 个参数: 文件路径 ( pathname )、 标志位 ( flags )以及 模式位 ( mode )。

    标志位 影响打开文件行为,例子中指定了 3 个标志:

    • O_CREAT ,表示文件不存在时 创建文件
    • O_TRUNC ,表示文件存在时 清空文件

    模式位 指定创建文件权限,仅当 O_CREAT 指定时有效。例子指定了 所属用户 对创建后的文件拥有 读写权限

    • S_IWUSR所属用户 拥有 写权限

    25-29 行,调用 系统调用将数据写入文件。同样, write 系统调用需要 3 个参数: ( fd )、数据缓冲区地址 ( buf ) 以及 数据字节数 ( count )。write 系统调用执行成功时,返回 成功写入字节数 ;出错则返回 -1

    接下来,我们运行 make 命令编译并执行 write 程序:

    检查新创建文件 first_file.txt 的权限,确实是 所属用户可读可写 ( rw ):

    接着,再次运行 writefirst_file.txt 文件写入字符串 abc

    再次写入时,行为与 系统调用的 flags 参数相关: 表示当目标文件存在时,清空文件。如果不使用该标志,那么文件内容应该是 abclo, world! (从头覆写)。相反,如果使用 标志,那么文件内容则是 Hello, world!abc (末尾追加)。

    订阅更新,获取更多学习资料,请关注我们的 微信公众号

    小菜学编程

    参考文献