发信人: riffle()
整理人: yangcs(2000-02-26 14:57:27), 站内信件
|
在bc3.1 for dos下,有个函数叫chsize,其功能是将文件
设置成指定的长度(加长或缩短)。具体用法如下:
#include <string.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
/* create text file containing 10 bytes */
handle = open("DUMMY.FIL", O_CREAT);
write(handle, buf, strlen(buf));
/* truncate the file to 5 bytes in size */
chsize(handle, 5);
/* close the file */
close(handle);
return 0;
}
以上是bc3.1自带帮助中的EXAMPLE。
chsize函数对应于中断21H的4201H功能调用。
《PC中断大全》相关内容如下:
中断21H - 功能3DH
“OPEN” - 打开现存文件。
中断21H - 功能3EH
“CLOSE” - 关闭文件。
中断21H - 功能3FH
“READ” - 从文件或设备中读。
中断21H - 功能40H
“WRITE” - 写入文件或设备。
中断21H - 功能41H
“UNLINK” - 删除文件。
中断21H - 功能42H
“LSEEK” - 设置当前文件位置。
目的:定位到文件中的指定位置。
适用对象:DOS 2.0 或更高版本。 限制:无。
调用时的寄存器: 返回时的寄存器:
AH = 42H CF清零 若成功
AL = 移动的原点 DX:AX = 以字节计的从文件
00H 文件起点 起点算起的新文件
01H 当前文件位置 位置
02H 文件终点 CF 置位 出现错误时
AX = 错误代码(01H,06H)
(见功能59H)
BX = 文件句柄
CX:DX = 离开新文件位置原点的偏移量
细节:对原点01H和02H来说,指针可在文件之前定位;在此情况不返回错误,
但后继的占据I/O的尝试则将产生错误。如果新的位置处在当前文件终点之外,
则文件将会被下一次写入而扩充(见功能40H)。
PASCAL中相应的函数好象是Truncate吧,很久不用,记不清了。
对于WINDOWS下,也有相应的API函数截段或扩充文件长度,各编译器更是
各自有所封装,这里就不讨论了。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.40.5]
|
|