Microsoft已弃用_open而支持_sopen_s。 推荐的等价参数是什么?
答案 0 :(得分:8)
现在我可以发布格式很好的答案,所以这里是:
有关
int fd = _open(name,oflags);
替换为
int fd;
errno_t errno = _sopen_s(&fd,name,oflags,_SH_DENYNO,0);
我发布此Q& A的原因是它提供了微软未提供的一些重要的非显而易见的信息。我同意_sopen_s是_open的不良替代品。我只研究了这个主题,因为我正在修复由_sopen_s提供的错误参数引起的错误。 _sopen_s只是在代码中去除编译器警告;最初的_open电话很好。
答案 1 :(得分:0)
最好的建议是忽略微软的所有出于政治动机的弃用。它们的“安全”功能与正确使用现有的标准C或类似POSIX的功能相比,没有实际的安全优势,如果使用不当,它们就像它们要替换的功能一样“不安全”。
答案 2 :(得分:0)
在Windows上我建议使用CreateFile,除非有充分的理由不这样做。在Linux" open"映射到内核函数,在Windows上 - 到库函数,使用" CreateFile"无论如何。 根据可移植性,此功能在Microsoft平台(Win32 / 64 / CE)上更具可移植性。当然,* nix上没有。