精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>工具箱>>关于最多可同时打开的文件数

主题:关于最多可同时打开的文件数
发信人: shixudong()
整理人: yangcs(2000-01-21 09:47:56), 站内信件
本人浏览了精华区关于最多可同时打开的文件数的一些讨论,也想发表一些观点




FILES=XX 表示的系统总共能够打开的文件数,而每一个进程系统默认设置为20。



这在进程初试化时由DOS系统在其PSP 中指定,要增加该限制的上限,可以也只能



通过程序修改PSP的相关内容实现(DOS并没有提供未公开的功能调用实现之),



但上限不得超过FILES=XX。tc2.0函数实现如下:

void add_file_handle(unsigned char * handle_table,unsigned int handle_



count)
{
    unsigned int psp;
    struct HANDLE
    {
      unsigned int len;
      unsigned char far * adr;
    };
    struct HANDLE far * handle;

    _AH=0x62;
    geninterrupt(0x21);
    psp=_BX;

    handle=(struct HANDLE far *)MK_FP(psp,0x0032);

    memset(handle_table,0xff,handle_count);
    movedata(FP_SEG((void far *)handle->adr),
     FP_OFF((void far *)handle->adr),
             FP_SEG((void far *)handle_table),
             FP_OFF((void far *)handle_table),
             handle->len);

    handle->len=handle_count;
    handle->adr=(unsigned char far *)MK_FP(FP_SEG((void far *)handle_t



able),FP_OFF((void far *)handle_table));
}

函数调用如下:

unsigned char handle_table[30];
add_file_handle(handle_table,sizeof(handle_table));
此处30表示最多可打开30个文件,上限不超过FILES=XX


附:
发信人: netwolf (网络之狼), 信区: DOS 
标  题: dos程序段前缀 
发信站: 网易虚拟社区 (Thu Dec 30 12:21:28 1999), 站内信件 

0h       
        int 20h 指令 
2h       
        顶层内存段地址 
4h       
        保留 
5h       
        远调用dos调度程序 
ah 
        int 22h 向量       
eh 
        int 23h 向量 
12h 
        int 24h 向量 
16h 
        父程序psp段 
18h 
        系统文件表项
        ;add by shixudong
        其实应叫用户文件表项,即进程初试化时由DOS系统在PSP中设置的20个

表项
        默认设置为: 01 01 01 00 02 FF FF FF FF FF 
                    FF FF FF FF FF FF-FF FF FF FF
        表示默认打开5个用户文件文件,分别是stdin、stdout、stderr、
        stdaux、stdprn,他们占用3个系统文件表项,即con(01)、aux(00)


        prn(02)
2ch 
        环境备分段地址 
2eh 
        dos ss;sp存储区  
32h 
        文件句柄记数区 
        ;add by shixudong
         默认设置:0x0014(十进制20)。表示psp+34h所指的表项长度为20。


         可修改为新的表项长度。
34h
        文件句柄指针 
        ;add by shixudong
         默认指向:psp+18h。即用户文件表项。可修改使之指向程序内的内存
区,
         用以打开更多的文件数。          
38h 
         share 前psp域 
3ch 
          保留 
50h 
         远调用dos调度程序 
52h 
          保留 
5ch 
           缺省 fcb 1 
6ch 
           缺省 fcb 2 
7ch 
            保留 
80h 
           命令行字节长度 
81h 
            命令行 
ffh 

;add by shixudong
由上可见,通过修改psp+32h和psp+34h处的值即可增加打开的文件数。最后,
别忘了将原psp+18h处的20项复制到新地方,超过20项的地方置ff(表示尚未打开




--
[email protected]

※ 修改:.shixudong 于 Jan 16 20:53:35 修改本文.[FROM: 202.102.109.62]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.109.62]

[关闭][返回]