精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>汇编语言>>关于chsize函数及其它

主题:关于chsize函数及其它
发信人: 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]

[关闭][返回]