пятница, 8 апреля 2011 г.

Security Enhancements in the CRT

       C некоторых пор Microsoft озаботилась безопасностью древних функций CRT, таких как: sprintfitoastrcpy и прочих. Полный список опубликован на сайте Microsoft Deprecated CRT Functions. Вроде все разумно, при переходе с VS 6 на VS 2008 просмотрел все warning компилятора и все указанные функции честно заменил их на *_s аналоги.
       Но в число прочих попала функция fopen, ее я естественно тоже заменил на fopen_s, и тут меня ждала неожиданность - оказывается поведение fopen и fopen_s немного разное, а точнее fopen_s открывает файл только для себя (not sharable). В моем случае получилось что, пока я не закрою программу, я не могу открыть "log" файл на просмотр и следить что происходит.
       Причем Microsoft честно предупреждает об этом в MSDN и говорит что делать:
Remarks
"Files opened by fopen_s and _wfopen_s are not sharable. If you require that a file be sharable, use _fsopen, _wfsopen with the appropriate sharing mode constant (for example, _SH_DENYNO for read/write sharing)."
       Но об этом надо каждый раз помнить, тупо следовать указаниям компилятора и менять все функции на их *_s аналоги нельзя!

Комментариев нет:

Отправить комментарий