fclear 或 fclear64 子例程

用途

在文件中创建一个孔。

标准 C 库 (libc.a)

语法

off_t fclear ( FileDescriptor,  NumberOfBytes)
int FileDescriptor;
off_t NumberOfBytes;

off64_t fclear64 ( FileDescriptor,  NumberOfBytes)
int FileDescriptor;
off64_t NumberOfBytes;

描述

对于FileDescriptor参数中指定的文件,fclear fclear64子程序从当前文件指针开始,将NumberOfBytes参数指定的字节数清零。 如果系统上安装了网络文件系统 (NFS) ,那么此文件可以驻留在另一个节点上。

弗朗 子例程最多只能清除文件的 最大偏移量 个字节,而 fclear64 最多可清除最大文件大小。

弗朗 fclear64 子例程不能应用于以 0-DEFER 方式打开的进程所打开的文件。

如果以下情况为真,则fclear fclear64子程序将清除文件的SetUserID位(S_ISUID):

  • 调用进程不具有 root 用户权限。
  • 调用进程的有效用户标识与该文件的用户标识不匹配。
  • 该文件可由组 (_IXGRP) 或其他 (_IXOTH) 执行。

如果出现以下情况,该子程序还会清除SetGroupID位(S_ISGID):

  • 该文件与该进程的有效组标识或其中一个补充组标识不匹配,

  • 该文件可由所有者 ((_IXUSR)) 或其他人员 (_IXOTH) 执行。
    注意:即使子程序失败,也会清除SetUserID和SetGroupID位,因为文件中的数据在检测到错误之前已被修改。

在支持大文件的编程环境中, 弗朗 将重新定义为 fclear64

参数

描述
FileDescriptor 指示必须打开由 FileDescriptor 参数指定的文件才能写入。 FileDescriptor 是一个小正整数,用于代替文件名来标识文件。 此函数与逻辑上等效的写操作不同,它将完整的二进制零块返回给文件系统,从而在文件中构造孔。
NumberOfBytes 指示 "搜索" 指针的高级字节数。 如果在文件结束后使用fclear fclear64子程序,文件的其余部分将被清除,而寻道指针将前进 NumberOfBytes。 文件大小将更新为包含此新孔,这会将当前文件位置保留在紧接新文件结束指针之外的字节处。

返回值

成功完成后,将返回NumberOfBytes值。 否则,返回值为-1,并设置errno全局变量来指示错误。

错误代码

如果以下一个或多个子例程为 true ,那么 弗朗 fclear64 子例程将失败:

描述
EIO I/O 错误。
EBADF FileDescriptor 值不是打开用于写入的有效文件描述符。
EINVAL 该文件不是一个常规文件。
电子文件 该文件由一个或多个进程映射 0-DEFER
EAGAIN 由于对文件强制的写锁定, 弗朗 子例程中的写操作失败。
描述
EFBIG 当前偏移加NumberOfBytes超过了与FileDescriptor 相关联的打开文件描述中规定的最大偏移量。
描述
EFBIG 尝试写入超过进程文件大小限制或文件大小最大限制的文件。 如果用户在执行进程之前设置了环境变量 XPG_SUS_ENV=ON ,那么当超过进程的文件大小限制时, SIGXFSZ 信号将发布到进程。

如果在系统上安装了 NFS ,那么如果满足以下条件,那么 fclear fclear64 子例程也可能失败:

描述
ETIMEDOUT 连接已超时。