可以使用ofstream对象作为backtrace_symbols_fd()的第三个参数吗?

Can we use ofstream object as a third argument in backtrace_symbols_fd()?

本文关键字:参数 三个 fd 对象 ofstream symbols backtrace 可以使      更新时间:2023-10-16

我必须调用backtrace_symbols_fd()函数,但该函数的第三个参数是文件描述符。那么我可以将第三个参数作为ofstream对象传递吗?

我正在输入以下代码:

 ofstream myfile;
 myfile.open ("example.txt");
 size_t size = backtrace(aray, 5000);
 backtrace_symbols_fd(aray, 5000, myfile);

但是用上面的函数调用我得到以下错误:

cannot convert 'std::ofstream' to 'int' for argument '3' to 
'void backtrace_symbols_fd(void* const*, int, int)'

正如您所发现的,不可能通过ofstream
只需使用open(2)函数获取文件描述符

这里有一个使用shared_ptr的疯狂的小想法:

#include <memory>
#include <cstdio>
std::shared_ptr<std::FILE> make_file(const char * filename, const char * flags)
{
  return std::shared_ptr<std::FILE>(std::fopen(filename, flags), std::fclose);
}
int main()
{
  auto fp = make_file("hello.txt", "wb");
  int  fd = fileno(fp.get());
  //...
  backtrace_symbols_fd(aray, 5000, fd);
}