发信人: 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]
  | 
 
 
 |