truncate() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

truncate() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

truncate, ftruncate - 将文件截断到指定长度

概要

#include <unistd.h>
#include <sys/types.h>

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

描述

truncate() 和 ftruncate() 函数将由 path 指定或由 fd 引用的常规文件截断为精确 length 字节的大小。

如果文件以前大于此大小,则多余的数据将丢失。如果文件以前较短,则它将被扩展,扩展部分将读取为空字节(’\0’)。

文件偏移量不会改变。

如果大小改变,则文件的 st_ctime 和 st_mtime 字段(分别是最后状态更改时间和最后修改时间;参见 stat(2))将被更新,并且 set-user-ID 和 set-group-ID 权限位可能会被清除。

对于 ftruncate(),文件必须以写入模式打开;对于 truncate(),文件必须可写。

返回值

成功时,返回零。出错时,返回 -1,并且 errno 被相应地设置。

错误

对于 truncate()
标签描述
EACCES 路径前缀的组件被拒绝搜索权限,或者用户无法写入指定的文件。(另见 path_resolution(2)。)
EFAULT Path 指向进程已分配的地址空间之外。
EFBIG 参数 length 大于最大文件大小。(XSI)
EINTR 在执行过程中捕获到信号。
EINVAL 参数 length 为负数或大于最大文件大小。
EIO 更新索引节点时发生 I/O 错误。
EISDIR 指定的文件是目录。
ELOOP 在转换路径名时遇到太多符号链接。
ENAMETOOLONG
 路径名的一个组件超过 255 个字符,或者整个路径名超过 1023 个字符。
ENOENT 指定的文件不存在。
ENOTDIR
 路径前缀的一个组件不是目录。
EPERM 底层文件系统不支持将文件扩展到其当前大小之外。
EROFS 指定的文件位于只读文件系统上。
ETXTBSY
 该文件是一个正在执行的纯过程(共享文本)文件。
对于 ftruncate(),相同的错误适用,但现在不是 path 可能出错的地方,而是 fd 可能出错的地方
EBADF fd 不是有效的描述符。
EBADFEINVAL
 fd 没有以写入模式打开。
EINVAL fd 不引用常规文件。

符合标准

4.4BSD、SVr4、POSIX.1-2001(这些调用首次出现在 4.2BSD 中)。

注释

以上描述适用于符合 XSI 的系统。对于不符合 XSI 的系统,POSIX 标准允许 ftruncate() 在 length 超过文件长度时的两种行为(请注意,在这种环境下根本没有指定 truncate()):返回错误或扩展文件。像大多数 Unix 实现一样,Linux 在处理本地文件系统时遵循 XSI 要求。但是,某些非本地文件系统不允许使用 truncate() 和 ftruncate() 将文件扩展到其当前长度之外:Linux 上一个值得注意的例子是 VFAT。

参见



previous next Printer Friendly

广告


  

广告



广告