如何从C程序向Linux中的控制台发送广播消息

我已经在C上编写了一个deamon,在Linux上工作,现在我需要能够像commad“wall”一样发送短消息到Linux控制台,或者init在重启系统时如何执行。

如何从我的程序内做到这一点?

最好的祝福

马雷克

当前控制台的linux设备是/dev/console ,但是你需要以root身份写入这个文件。 有关详细信息,请参阅控制台的手册页,但这里是一个摘录:

在控制台上启动进程的常用方法是:

  • (a)告诉init(8)(在inittab(5)中)在控制台上启动mingetty(8)(或agetty(8));
  • (b)要求openvt(1)在控制台上启动一个进程;
  • (c)启动X – 它会找到第一个未使用的控制台,并在那里显示它的输出(还有古代的doshell(8)。)

要将消息发送到多个终端/控制台, ttymsg()在各个tty节点上使用ttymsg()

有关如何使用这个C程序的一个很好的例子,请查看walk命令的来源 。 我们可以精确地看到它是如何准备一个消息缓冲区并将其作为广播发送到所有当前登录的用户的各个终端。

为了发送ocasional短消息,最好的(最便携的,最简单的)方法就是运行wall(1)。

我想避免从我的程序执行其他二进制文件。 ttymsg和来自墙程序的代码解决方案适合我。

感谢您的帮助Marek