Что такое эквивалент _sopen_s () для функции open ()? - PullRequest
4 голосов
/ 06 августа 2011

Microsoft устарела _open в пользу _sopen_s.Каковы рекомендуемые эквивалентные аргументы?

Ответы [ 3 ]

8 голосов
/ 11 августа 2011

Хорошо, теперь я могу опубликовать свой красиво отформатированный ответ, вот он:

Для

int fd = _open(name,oflags);

Заменить на

int fd;
errno_t errno = _sopen_s(&fd,name,oflags,_SH_DENYNO,0);

Причина, по которой я написал этоВопрос-ответ заключается в том, что он предоставляет важную неочевидную информацию, которую Microsoft не предоставила.Я согласен, что _sopen_s - плохая замена _open.Я исследовал эту тему только потому, что исправлял ошибку, вызванную неверными аргументами, которые передаются _sopen_s._Sopen_s был только в коде, чтобы избавиться от предупреждений компилятора;исходный _открытый вызов был в порядке.

0 голосов
/ 20 мая 2012

В Windows я предлагаю использовать CreateFile , если нет веских причин не делать этого.В Linux «open» соответствует функции ядра, в Windows - функции библиотеки, которая все равно использует «CreateFile».Что касается переносимости, эта функция несколько более переносима на платформах Microsoft (Win32 / 64 / CE).И, естественно, недоступно на * nix.

0 голосов
/ 06 августа 2011

Лучшая рекомендация - игнорировать все политически мотивированные Microsoft унижения.Их «безопасные» функции не дают никаких реальных преимуществ безопасности по сравнению с правильным использованием существующих, стандартных C или POSIX-подобных функций, и при неправильном использовании они так же «небезопасны», как и функции, которые они стремятся заменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...