C fseek一个新创建的文件
我对C中的fseek()用法有一个疑问。我知道它可以设置fopen()创建的文件描述符的偏移位置。但它也可以设置新创建文件的偏移位置吗?更具体地说,我可以:C fseek一个新创建的文件,c,file,fseek,C,File,Fseek,我对C中的fseek()用法有一个疑问。我知道它可以设置fopen()创建的文件描述符的偏移位置。但它也可以设置新创建文件的偏移位置吗?更具体地说,我可以: FILE * pFile; pFile = fopen ( "myfile.txt" , "wb" ); //myfile.txt doesn't exit before fseek ( pFile , 1024*1024*1024 , SEEK_SET); fclose(pFile); 它会创建一个大小为1GB且没有内
FILE * pFile;
pFile = fopen ( "myfile.txt" , "wb" ); //myfile.txt doesn't exit before
fseek ( pFile , 1024*1024*1024 , SEEK_SET);
fclose(pFile);
它会创建一个大小为1GB且没有内容的文件吗?或者我应该至少写些东西来创建这个1GB文件吗?
POSIX允许查找超出现有文件结尾的内容。如果输出是
执行此寻道后,从间隙读取的任何数据都将返回零
字节。在文件系统支持的情况下,这将创建一个
POSIX允许查找超出现有文件结尾的内容。如果输出是
执行此寻道后,从间隙读取的任何数据都将返回零
字节。在文件系统支持的情况下,这将创建一个
你可以这样做,它创建的差距文件。从gap读取的任何数据都返回零字节。系统会为文件系统进行优化。您可以这样做,它会创建gap文件。从gap读取的任何数据都返回零字节。系统会针对文件系统进行优化。我可以合理地确定会有内容,这只是随机内容,就像分配的磁盘区域中发生的一样。您可能希望将数据区域初始化为某个已知值函数应允许将文件位置指示器设置在文件中现有数据的末尾之外。如果稍后在此点写入数据,则间隙中数据的后续读取将返回值为0的字节,直到数据实际写入间隙。“但是,如果关闭文件,然后再次打开,会发生什么情况?”?它还记得吗?seek只会移动位置,但不会扩展文件,除非您在该位置写入内容。正如@mariozanne所说。另一方面,当您想要处理非常大的文件时,最好使用
fseek()
。fseek
可能允许查找文件末尾以外的内容,但没有明确说明文件大小是否因此而扩展。明确声明seek本身不会扩展文件的大小。换句话说,在使用lseek
时,需要某种形式的写入操作来扩展文件的大小。但是,没有任何东西禁止或允许fseek
以同样的方式行事。C11草案N1570指出,“如果发生读或写错误,则设置流的错误指示器,并且fseek
失败。”我可以合理地确定会有内容,它只是随机内容,就像分配的磁盘区域中发生的一样。您可能希望将数据区域初始化为某个已知值函数应允许将文件位置指示器设置在文件中现有数据的末尾之外。如果稍后在此点写入数据,则间隙中数据的后续读取将返回值为0的字节,直到数据实际写入间隙。“但是,如果关闭文件,然后再次打开,会发生什么情况?”?它还记得吗?seek只会移动位置,但不会扩展文件,除非您在该位置写入内容。正如@mariozanne所说。另一方面,当您想要处理非常大的文件时,最好使用fseek()
。fseek
可能允许查找文件末尾以外的内容,但没有明确说明文件大小是否因此而扩展。明确声明seek本身不会扩展文件的大小。换句话说,在使用lseek
时,需要某种形式的写入操作来扩展文件的大小。但是,没有任何东西禁止或允许fseek
以同样的方式行事。C11草案N1570指出,“如果发生读或写错误,则设置流的错误指示器,fseek
失败。”