【问题标题】:Where is the open( char *filename, int access, int permission) defined?open(char *filename, int access, int permission) 定义在哪里?
【发布时间】:2016-10-18 12:10:04
【问题描述】:

我必须在 c/c++ 中包含什么文件才能使用 open() 函数? 我已经包含了 fcntl.h、stdio.h 和 Visual Studio 仍然告诉我“打开”没有定义。

【问题讨论】:

  • Visual Studio 标准库没有open 函数。虽然它确实有_open,但即使是那个也已被弃用。我真的不建议在 Windows 中使用它(或其替代品)。如果您想要可移植的文件处理,请使用 C++ 流,或者 C fopen 和朋友,如果您不关心可移植性,请使用 Windows API 函数。
  • 然后是一些吹毛求疵。你真的应该花一些时间来read about how to ask good questions,并学习如何创建Minimal, Complete, and Verifiable Example。你“包括”了吗?包括什么
  • 这取决于语言。没有 C/C++ 语言,所以只有两种不同语言 C 和 C++。选择你使用的那个!
  • 如果你 read the docs 你可以看到有多个覆盖,它将在 sys/types.h、sys/stat.h、fcntl.h 中。但是带有解析器/分析器的 IDE 应该准确地告诉您将使用哪个函数,从哪个标头中。
  • @JoachimPileborg open() 非常标准 - it's POSIX。 “弃用”只是微软的一部分。程序员可能想要使用较低级别的 open()/[p]read()/[p]write() 而不是较高级别的 C++ 流有很多原因。立即想到性能和便携性。

标签: c++ c file


【解决方案1】:

如文档中所述:

_open 已弃用,取而代之的是 _sopen_s

在每个链接的页面底部,您将看到这两个功能所需的标题。

#include <io.h> // REQUIRED
#include <fcntl.h> // OPTIONAL
#include <sys\types.h> // OPTIONAL
#include <sys\stat.h> // OPTIONAL
#include <share.h> // OPTIONAL FOR _sopen_s

【讨论】:

  • open()standard POSIX function. “弃用”是 Microsoft 特有的,并且几乎需要故意忽略 POSIX 标准。
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多