user-0 提问: 不包含stdio.h头文件，如何读写文件

回复:
user: user-1
content: 单独使用一个 C 文件，使用 stdio.h. 她们仅仅是定义。

user: user-2
content: 引用 2 楼 sunmaxwell 的回复:[quote=引用 1 楼 JiangWenjie2014 的回复:] 那就用系统提供的文件操作啊，windows(Windows.h)有CreateFile，ReadFile；linux(fcntl.h, unistd.h)有open，read，write，close。Windows下的CreateFile、ReadFile函数都是C++函数，我想问的是C语言哈，这个标准是针对C语言的，所以很困惑~Linux这些函数好像是针对C语言的，在Linux系统下开发得少了一点。  Syntax C++ HANDLE WINAPI CreateFile(   __in      LPCTSTR lpFileName,   __in      DWORD dwDesiredAccess,   __in      DWORD dwShareMode,   __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,   __in      DWORD dwCreationDisposition,   __in      DWORD dwFlagsAndAttributes,   __in_opt  HANDLE hTemplateFile );[/quote] 这明明是C函数，你怎么说是C++函数呢？

user: user-3
content: Low-level I/O These functions invoke the operating system directly for lower-level operation than that provided by stream I/O. Low-level input and output calls do not buffer or format data.  Low-level routines can access the standard streams opened at program startup using the following predefined handles:  Stream Handle  stdin 0  stdout 1  stderr 2    Low-level I/O routines set the errno global variable when an error occurs. You must include STDIO.H when you use low-level functions only if your program requires a constant that is defined in STDIO.H, such as the end-of-file indicator (EOF).  Low-Level I/O Functions  Function Use  _close Close file  _commit Flush file to disk  _creat, _wcreat Create file  _dup Return next available file handle for given file  _dup2 Create second handle for given file  _eof Test for end of file  _lseek, _lseeki64 Reposition file pointer to given location  _open, _wopen Open file  _read Read data from file  _sopen, _wsopen Open file for file sharing  _tell, _telli64 Get current file-pointer position  _umask Set file-permission mask  _write Write data to file    _dup and _dup2 are typically used to associate the predefined file handles with different files.

user: user-0
content: 引用 1 楼 JiangWenjie2014 的回复:那就用系统提供的文件操作啊，windows(Windows.h)有CreateFile，ReadFile；linux(fcntl.h, unistd.h)有open，read，write，close。Windows下的CreateFile、ReadFile函数都是C++函数，我想问的是C语言哈，这个标准是针对C语言的，所以很困惑~Linux这些函数好像是针对C语言的，在Linux系统下开发得少了一点。  Syntax C++ HANDLE WINAPI CreateFile(   __in      LPCTSTR lpFileName,   __in      DWORD dwDesiredAccess,   __in      DWORD dwShareMode,   __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,   __in      DWORD dwCreationDisposition,   __in      DWORD dwFlagsAndAttributes,   __in_opt  HANDLE hTemplateFile );

user: user-4
content: 那就用系统提供的文件操作啊，windows(Windows.h)有CreateFile，ReadFile；linux(fcntl.h, unistd.h)有open，read，write，close。

user: user-1
content: 所以我的第一个回复就是告诉，使用一个单独的 C 文件。

user: user-0
content: 引用 10 楼 Saleayas 的回复:MISRA 标准是针对想汽车控制系统，这类嵌入式的，永远运行，安全至上的软件。 你在这类嵌入式中使用 fopen 是不标准的。 您可以参考9楼的回答哈~谢谢您这么热心地回答~~

user: user-1
content: 而且，我觉得如果是你使用 Windows 操作系统，这个标准就没有意义了。 因为这个标准是针对嵌入式的。  因为在 Windows 编程中，使用的库都是可能有动态内存分配的。

user: user-0
content: 引用 9 楼 s_a_n_ 的回复:那个标准不是说的很清楚吗？ 就是说，标准本身是假定你没有stdio.h中规定的i/o需求的。而现在你有读写文件的需求，因此，需要你的嵌入式系统支持你读写文件这类操作。对于标准情况而言，这类操作可能包含大量为定义的行为，因此，至于如何使用，只有从你的系统本身那里找答案。 ps：提示一下，怎么读写文件要看你的文件系统接口，如果你的系统里根本没有文件系统，那么就不能读写文件。  您说得还是蛮有道理的，谢谢您的回答

user: user-1
content: 在二进制代码中， C++ 生成的 和 C 没有区别。 所有 C++ 的代码，都可以以 C 的方式写出来。 所以不管 CreateFile 时候是有 C 语言写的，结果都是一样的。  在 MSDN 文档中，C++ 这个标签包含了 C，因为这个 文档是给 vS 用的。 和这个标签平齐的不是 C，而是 C#、JavaScript、F# 和 VB 这些语言。

user: user-0
content: 引用 8 楼 dbzhang800 的回复:[quote=引用 6 楼 sunmaxwell 的回复:] 额。。。不至于吧？这是MSDN的官方解释，C++代码~~你可以自己动手查下~  你不妨把你看到的官方解释贴出来。 这个说法，其他人估计还真查不出来。 [/quote]

user: user-1
content: MISRA 标准是针对想汽车控制系统，这类嵌入式的，永远运行，安全至上的软件。 你在这类嵌入式中使用 fopen 是不标准的。

user: user-5
content: 那个标准不是说的很清楚吗？ 就是说，标准本身是假定你没有stdio.h中规定的i/o需求的。而现在你有读写文件的需求，因此，需要你的嵌入式系统支持你读写文件这类操作。对于标准情况而言，这类操作可能包含大量为定义的行为，因此，至于如何使用，只有从你的系统本身那里找答案。 ps：提示一下，怎么读写文件要看你的文件系统接口，如果你的系统里根本没有文件系统，那么就不能读写文件。

user: user-2
content: 引用 6 楼 sunmaxwell 的回复:额。。。不至于吧？这是MSDN的官方解释，C++代码~~你可以自己动手查下~  你不妨把你看到的官方解释贴出来。 这个说法，其他人估计还真查不出来。

user: user-0
content: 引用 5 楼 Saleayas 的回复:单独使用一个 C 文件，使用 stdio.h. 她们仅仅是定义。 您好，谢谢您的回答。MISRA C 2004标准不允许使用stdio.h啊，所以另外包含一个也无济于事的哈~~

user: user-0
content: 引用 4 楼 dbzhang800 的回复:[quote=引用 2 楼 sunmaxwell 的回复:] [quote=引用 1 楼 JiangWenjie2014 的回复:] 那就用系统提供的文件操作啊，windows(Windows.h)有CreateFile，ReadFile；linux(fcntl.h, unistd.h)有open，read，write，close。Windows下的CreateFile、ReadFile函数都是C++函数，我想问的是C语言哈，这个标准是针对C语言的，所以很困惑~Linux这些函数好像是针对C语言的，在Linux系统下开发得少了一点。  Syntax C++ HANDLE WINAPI CreateFile(   __in      LPCTSTR lpFileName,   __in      DWORD dwDesiredAccess,   __in      DWORD dwShareMode,   __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,   __in      DWORD dwCreationDisposition,   __in      DWORD dwFlagsAndAttributes,   __in_opt  HANDLE hTemplateFile );[/quote] 这明明是C函数，你怎么说是C++函数呢？[/quote] 额。。。不至于吧？这是MSDN的官方解释，C++代码~~你可以自己动手查下~