fclear 或 fclear64 子例程
用途
在文件中创建一个孔。
库
标准 C 库 (libc.a)
语法
描述
对于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 | 连接已超时。 |