使用fstream向所有用户发送消息

时间:2014-12-28 21:28:36

标签: c++ shell debian fstream

我正在研究如何重新创建类似linux wall命令的东西。

类似于echo "Hello world" | wall

这会向所有用户的shell发送一条消息。

在目录/dev/pts/中有几个用于写入用户shell的管道。因此,做一些像......这样的事情很容易。

#include <fstream>

int main() {
   std::ofstream wall("/dev/pts/2");
   wall << "hello world" << std::endl;
   return 0;
}

问题是/dev/pts/*为每个开放的shell (pts / 2,pts / 3,...)提供了一个Feed,是否有更通用的方法来执行此操作,或者我是否必须枚举/dev/pts/中的所有Feed以从C ++代码向每个用户发送消息?

注意:不使用系统调用。

1 个答案:

答案 0 :(得分:3)

您必须枚举所有字段(如果您不打算使用系统调用)。这可以这样做:

#include <fstream>
#include <string>

template <class File>
struct lock_helper // Simple fstream manager just for convenience
{
    template<class... Us>
    lock_helper(File& file, Us&&... us)
    {
        file.close();
        file.open(std::forward<Us>(us)...);
    }
};

int main()
{
    std::ofstream out;
    for (int i = 2; out; ++i)
    {
        lock_helper<std::ofstream> lock(out, std::string("/dev/pts/") + std::to_string(i));
        out << "Hello, World\n";
    }
}