文件写入
同样,我们还是通过实现一个简单的写文件程序 write 来学习相关 的使用方法。write 程序用法如下:
程序接收两个命令行参数—— 待写入文件路径 以及 写入内容 (字符串)。程序负责打开待写入文件并写入指定内容,最后提示成功写入字节数。
程序源码 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 ):
接着,再次运行 write 往 first_file.txt 文件写入字符串 abc
:
再次写入时,行为与 系统调用的 flags 参数相关: 表示当目标文件存在时,清空文件。如果不使用该标志,那么文件内容应该是 abclo, world!
(从头覆写)。相反,如果使用 标志,那么文件内容则是 Hello, world!abc
(末尾追加)。
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :
小菜学编程