RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : fclose()


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : saa
To : Sanych
Subj : fclose()

1. при exit() C-подсистема сама закроет все хендлы, связанные с FILE.

2. при выходе из проги (kill / exit() или abort()) нормальная ОС (в число коих входит OS/2) закроет все связанные с ней бесхозные хендлы.

3. 100 раз всё равно не хватит. (кажется, надо минимум штук 500).

4. ИМХО это не самых простой путь угробить систему, даже если exit() не делать. Гораздо легче и ненепряжнее это получается через пару суток неспешного запускания child-процессов, если у них не запрашивать код завершения и запускать без P_NOWAITO. Но это только пока не выполнишь exit().

5. А вот другой вопрос - файлы, открытые родителем без явного указания NOINHERIT, передаются всем его потомкам. Поскольку те в свою очередь эти файлы не открывали, и не знают что это такое, то и наследование этих хендлов продолжается во всех поколениях.

В итоге, когда запустится PMShell и иже с ним, и когда дело доходит до моей проги, могут быть использованы все хендлы из лимита 20 штук (реально оказывается использовано около половины).
В итоге:
(1) на каждый процесс в system space резервируется место под почти все файлы его родителей. Не удивлюсь, что по некоему handle моей проге доступен на "rb+" os2.ini. Кстати, там ни у кого инишники не кривились?

(2) моя прога сама должна запрашивать DosSetMaxFH ровно в том объеме, сколько хендлов ей нужно самой. А её дети, значит, должны запрашивать ещё больше?

Получется, что единственая верная стратегия - это при каждом DosOpen fail запрашивать ещё парочку хендлов, т.е. приходим к тому, с чего начали - тогда ничто не будет мешать программе съесть всё имеющееся "системное пространство".

Примечание - FileCommander всё же как-то закрывает все левые родительские хендлы. В доках такой функции я не нашел. (Сишная closeall - не то). Делать же for (i=0;i<65536li++) close(i); мне как-то боязно.


Mon 03 Dec 2001 18:39 Mozilla/2.02 (X11; I)




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.