_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

另请参阅

文件处理
_close
_sopen_wsopen
_open_wopen