_chsize
更改文件大小。 有一个更安全的版本;请参阅 _chsize_s
。
语法
int _chsize(
int fd,
long size
);
参数
fd
引用打开的文件的文件描述符。
size
文件的新长度(以字节为单位)。
返回值
如果已成功更改文件大小,则 _chsize
返回值 0。 返回值 -1 表示错误:如果指定文件是只读的或针对访问锁定,则将 errno
设置为 EACCES
;如果描述符无效,则将其设置为 EBADF
;如果设备上没有可用空间,则将其设置为 ENOSPC
;如果 size
小于零,则将其设置为 EINVAL
。
有关返回代码的详细信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
注解
_chsize
函数扩展或截断与 fd
关联的文件,以达到 size
所指定的长度。 必须在允许写入的模式下打开文件。 如果扩展该文件,将追加 Null 字符 ('\0')。 如果文件被截断,则从缩短的文件的末尾到文件原始长度的所有数据都将丢失。
此函数验证其参数。 如果 size
小于零,或者 fd
是无效的文件描述符,则调用无效的参数处理程序,如参数验证中所述。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 | 可选标头 |
---|---|---|
_chsize |
<io.h> | <errno.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_chsize.c
// This program uses _filelength to report the size
// of a file before and after modifying it with _chsize.
#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <share.h>
int main( void )
{
int fh, result;
unsigned int nbytes = BUFSIZ;
// Open a file
if( _sopen_s( &fh, "data", _O_RDWR | _O_CREAT, _SH_DENYNO,
_S_IREAD | _S_IWRITE ) == 0 )
{
printf( "File length before: %ld\n", _filelength( fh ) );
if( ( result = _chsize( fh, 329678 ) ) == 0 )
printf( "Size successfully changed\n" );
else
printf( "Problem in changing the size\n" );
printf( "File length after: %ld\n", _filelength( fh ) );
_close( fh );
}
}
File length before: 0
Size successfully changed
File length after: 329678