C++ 如何检测函数是否执行IO操作?

C++ 如何检测函数是否执行IO操作?,c++,unix,io,C++,Unix,Io,我是否可以寻找任何指标来了解函数是否执行I/O操作? 主要的目标平台是Linux(Ubuntu或它的一些变体) 最明显的方法是拥有此类函数/库的目录,并检查其中是否存在该函数。然而,我想知道如何在第一时间建立这样一个目录 例如,printf最终写入标准输出,因此它将计数。从USB端口读取数据的函数也将计算在内。但是他们有什么共同点吗,即使我不得不挖掘到最底层 这可能与问题无关,但在理想情况下,我可以利用这些函数的某些模式,以便使用工具自动识别它们。我不确定要查找什么低级指令。当然, < P>标

我是否可以寻找任何指标来了解函数是否执行I/O操作? 主要的目标平台是Linux(Ubuntu或它的一些变体)

最明显的方法是拥有此类函数/库的目录,并检查其中是否存在该函数。然而,我想知道如何在第一时间建立这样一个目录

例如,
printf
最终写入标准输出,因此它将计数。从USB端口读取数据的函数也将计算在内。但是他们有什么共同点吗,即使我不得不挖掘到最底层



这可能与问题无关,但在理想情况下,我可以利用这些函数的某些模式,以便使用工具自动识别它们。我不确定要查找什么低级指令。当然,

< P>标准C++当然没有USB读的功能,但我们暂时忽略这个细节。 <函数>函数“I/O”的问题可以通过标准库C++来近似,询问库函数有哪些。这直接指向一组,当然现在还有

(从C++引用复制:)

转发输入/输出库中所有类的声明
std::ios_基类、std::basic_ios类模板和几个typedef
std::basic_istream类模板和几个typedef
std::basic_ostream、std::basic_iostream类模板和几个typedef
几个标准流对象
std::basic_fstream、std::basic_ifstream、std::basic_流类模板和几个typedef
std::basic_stringstream、std::basic_istringstream、std::basic_ostringstream类模板和几个typedef
(自C++20以来)std::basic_osyncstream、std::basic_syncbuf和typedefs
(已弃用)std::stream,std::istrstream,std::ostrstream
用于控制输入和输出格式的助手函数
std::basic_streambuf类模板
C型输入输出函数

标准C++当然没有从USB读取的功能,但是我们暂时忽略这个细节。 <函数>函数“I/O”的问题可以通过标准库C++来近似,询问库函数有哪些。这直接指向一组,当然现在还有

(从C++引用复制:)

转发输入/输出库中所有类的声明
std::ios_基类、std::basic_ios类模板和几个typedef
std::basic_istream类模板和几个typedef
std::basic_ostream、std::basic_iostream类模板和几个typedef
几个标准流对象
std::basic_fstream、std::basic_ifstream、std::basic_流类模板和几个typedef
std::basic_stringstream、std::basic_istringstream、std::basic_ostringstream类模板和几个typedef
(自C++20以来)std::basic_osyncstream、std::basic_syncbuf和typedefs
(已弃用)std::stream,std::istrstream,std::ostrstream
用于控制输入和输出格式的助手函数
std::basic_streambuf类模板
C型输入输出函数

嗯,我认为您应该分析asm中的一些系统调用,但究竟是什么是一个困难的问题。这显然取决于你的操作系统。理想情况下,您应该为每个函数创建一个调用树,并找到包含您正在查找的系统调用的分支。我认为任何答案都将高度依赖于您的目标平台。你能说明你在为什么样的环境而建吗?Windows,UNIX,智能手机,嵌入式设备……?理想地,任何IO,但我会优先考虑USB接口在这种情况下。听起来你的问题是不相关的C++本身,但一些OS特定的接口/功能。@ TimRANDAR最好是UNIX。我在问题中澄清了这一点。嗯,我认为你们应该分析asm的一些系统调用,但到底什么是困难的问题。这显然取决于你的操作系统。理想情况下,您应该为每个函数创建一个调用树,并找到包含您正在查找的系统调用的分支。我认为任何答案都将高度依赖于您的目标平台。你能说明你在为什么样的环境而建吗?Windows,UNIX,智能手机,嵌入式设备……?理想地,任何IO,但我会优先考虑USB接口在这种情况下。听起来你的问题是不相关的C++本身,但一些OS特定的接口/功能。@ TimRANDAR最好是UNIX。我在问题中澄清了这一点。是的,我知道,
ios\u base::ios\u base
不太可能进行任何实际的I/O,或者“std::istringstream::istringstream”。当然,任何内存的使用都可以触发到磁盘的交换,包括堆栈内存。所以这个列表只是官方的,并不一定有意义。我意识到我的问题可能与C++没有任何关系,在下面,你的答案可能是我能得到的最接近的东西。谢谢你的指点,这些可能有助于指导未来的搜索。是的,我知道,
ios\u base::ios\u base
不太可能进行任何实际的I/O,或者“std::istringstream::istringstream”。当然,任何内存的使用都可以触发到磁盘的交换,包括堆栈内存。所以这个列表只是官方的,并不一定有意义。我意识到我的问题可能与C++没有任何关系,在下面,你的答案可能是我能得到的最接近的东西。谢谢你的指点,这些可能有助于指导未来的搜索。
<iosfwd>    forward declarations of all classes in the input/output library
<ios>       std::ios_base class, std::basic_ios class template and several typedefs
<istream>   std::basic_istream class template and several typedefs
<ostream>   std::basic_ostream, std::basic_iostream class templates and several typedefs
<iostream>  several standard stream objects
<fstream>   std::basic_fstream, std::basic_ifstream, std::basic_ofstream class templates and several typedefs
<sstream>   std::basic_stringstream, std::basic_istringstream, std::basic_ostringstream class templates and several typedefs
<syncstream> (since C++20)  std::basic_osyncstream, std::basic_syncbuf, and typedefs
<strstream> (deprecated)    std::strstream, std::istrstream, std::ostrstream
<iomanip>   Helper functions to control the format of input and output
<streambuf> std::basic_streambuf class template
<cstdio>    C-style input-output functions