相关疑难解决方法(0)

在不同进程之间传递文件描述符的便携方法

在大多数UNIX系统上,可以通过fork()轻松地为子进程/父进程在进程之间传递打开的文件; 但是我需要分享一个fd"之后"孩子已经分叉了.

我发现一些网页告诉我sendmsg()可能适用于仲裁过程; 但这似乎非常依赖操作系统和复杂.该portlisten好像我能找到的最好的例子,但我更喜欢一个良好的包装库的libevent一样,隐藏的kqueue的所有魔法,游泳池,...

有谁知道是否有一些库(和便携式方式)这样做?

unix share fork file-descriptor

23
推荐指数
2
解决办法
3万
查看次数

创建全局已知且可自动删除的临时目录(C++)?

在C++中,我有一些需要写入临时目录的函数.理想情况下,只创建一个他们都写入的临时目录(以最小化I/O开销).程序退出时,应自动删除该目录.

但是,我不想在main函数中处理temp目录的创建和删除,因为我认为只有实际使用该目录的函数才应该负责它的创建和删除.并且主函数不一定知道根本使用临时目录.

这是我尝试过的(参见下面的代码):可以从任何地方全局调用的getTempDir()函数仅在其第一次调用时创建目录,并在每次调用时返回目录名称.在第一次调用时,它还会为一个小的DirRemover对象创建一个静态boost :: shared_ptr,该对象的析构函数将删除该目录.程序退出时会自动调用析构函数.

问题是它不会在程序退出失败时调用FileRemover析构函数,或者杀死等等.是否有更好的解决方案?

这是代码:

std::string getTempDir(){
  static bool alreadyThere = false;
  static std::string name = "";
  if(!alreadyThere){
    // create dir with
    // popen("mktemp -p /tmp","r")) 
    // and store its name in 'name' 
    removeAtEnd(name);
    alreadyThere = true;
  }
  return name;
}

void removeAtEnd(const std::string& name){
  static boost::shared_ptr<DirRemover> remover(new DirRemover(name));
}

struct DirRemover {
  std::string name;
  DirRemover(const std::string& n) : name(n){}
  ~DirRemover(){
    // remove 'name' dir with popen("rm -r ...")
  }
};
Run Code Online (Sandbox Code Playgroud)

c++ file-io global-variables signal-handling

1
推荐指数
1
解决办法
703
查看次数