DOS 模拟器中的文件限制

DOS 模拟器中的文件限制

我目前正在尝试运行一个 dos 控制台应用程序,该应用程序必须同时打开一定数量的文件(超过 15 个)。我尝试使用 dosbox 和 dosemu。Dosbox 应该支持同时打开 127 个文件,而 dosemu 有 config.sys 文件,您可以在其中设置此限制。所以我尝试了一个打开文件的小 C 程序,得到了以下结果:

int main (void) {

  FILE *archivos[300];
  char numstr[15];
  int i=0,nmax=0;

  printf("\nIngrese el numero maximo de archivos que desea crear: ");
  scanf("%d",&nmax);
  for( i=0; i<nmax ; i++) { 
    sprintf( numstr, "prueba%d.dat", i);
    if(!(archivos[i]=fopen( numstr ,"w"))) 
    {
      printf("\nNo se pudo abrir el archivo %s", numstr);
      printf("\nEl numero maximo de archivos abiertos fue: %d", i);
      exit(1);
    }
  }

  printf("\nNo ocurrio un error. El numero de archivos abiertos es: %d\n", i);
  for( i=0; i<nmax; i++)
    fclose( archivos[i] ); 
  return( 0 );
}

dosemu 和 dosbox 都只允许我打开 15 个文件。

这是来自 dosemu 的 config.sys(其中 files=100):

rem config.sys for DOSEMU + FreeDOS
rem note that the initial "D:" is set to "Z:" at the end
SWITCHES=/F
DOS=UMB,HIGH
dosdata=umb
lastdrive=Z
files=100
stacks=0
buffers=10
device=d:\dosemu\ems.sys
devicehigh=d:\dosemu\cdrom.sys 
install=d:\dosemu\lredir.com z: linux\fs\${DOSEMU_LIB_DIR}/drive_z ro
shellhigh=z:\command.com /e:1024 /p

答案1

好的,经过一番研究,我发现即使你在 dosbox 或 dosemu 中设置了文件限制,这也会影响每个终端可以打开的文件数量。你可以从单个进程打开的文件数量与可用文件句柄的数量有关,在本例中,msdos 系统为 20 个,stderr、stdin、stdout、stdaux、sdtprn 为 5 个。正如解释的那样 MS-DOS 程序员常见问题解答

相关内容