В настоящее время я пытаюсь запустить консольное приложение DOS, которое должно открывать определенное количество файлов одновременно (более 15). Я пытался с DOSBox и Dosemu. Предполагается, что Dosbox поддерживает 127 одновременных файлов, а в dosmu есть файл 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 );
}
Как dosmu, так и dosbox позволяют открывать только 15 файлов.
это config.sys из dosmu (где 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
Хорошо, после проведения некоторого исследования, я нашел, что даже при установлении предела файла в dosbox или dosemu это будет влиять к количеству файлов, которые можно открыть на терминал. Количество файлов, которые можно открыть от единственного процесса, оно имеет отношение к количеству доступных дескрипторов файлов, в этом случае 20 для систем MS-DOS, 5 для stderr, stdin, stdout, stdaux, sdtprn. Как объясняет этот программист FAQ MS-DOS.