微软赞成_sopen_s,已弃用_open。 什么是推荐的等价论据?
那么现在我可以发布我格式良好的答案,所以这里是:
对于
int fd = _open(name,oflags);
用。。。来代替
int fd; errno_t errno = _sopen_s(&fd,name,oflags,_SH_DENYRW,0);
我发布这个问答的原因是它提供了微软没有提供的一些非显而易见的信息。 我同意_sopen_s是_open的一个不好的替代品。 我只研究这个主题,因为我正在修正由提供给_sopen_s的错误参数引起的错误。 _sopen_s只是在代码中摆脱编译器警告; 原来的_open电话很好。
最好的建议是忽略微软所有的政治动机 。 他们的“安全”功能与正确使用现有的标准C或POSIX类功能相比,没有实际的安全优势,如果使用不正确,它们与他们所要取代的功能一样“不安全”。
在Windows上,我建议使用CreateFile,除非有充分的理由不这样做。 在Linux上,“打开”映射到内核函数,在Windows上映射到库函数,反正使用“CreateFile”。 根据可移植性,这个函数在微软平台(Win32 / 64 / CE)上更加便携。 而且,自然不能在* nix上使用。