当前位置:嗨网首页>书籍在线阅读

09-截断文件_truncate()和ftruncate()系统调用

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.8 截断文件:truncate()和ftruncate()系统调用

truncate()和ftruncate()系统调用将文件大小设置为length参数指定的值。

94.png 若文件当前长度大于参数length,调用将丢弃超出部分,若小于参数length,调用将在文件尾部添加一系列空字节或是一个文件空洞。

两个系统调用之间的差别在于如何指定操作文件。truncate()以路径名字符串来指定文件,并要求可访问该文件,且对文件拥有写权限。若文件名为符号链接,那么调用将对其进行解引用。而调用ftruncate()之前,需以可写方式打开操作文件,获取其文件描述符以指代该文件,该系统调用不会修改文件偏移量。

若ftruncate()的length参数值超出文件的当前大小,SUSv3允许两种行为:要么扩展该文件(如Linux),要么返回错误。而符合XSI标准的系统则必须采取前一种行为。相同的情况,对于truncate()系统调用,SUSv3则要求总是能扩展文件。

truncate()无需先以open()(或是一些其他方法)来获取文件描述符,却可修改文件内容,在系统调用中可谓独树一帜。