2014-01-29 55 views
2

我已經在C上編寫了一個在Linux上運行的deamon,現在我需要能夠將短消息發送到像commad「wall」這樣的Linux控制檯,或者如何init在重新啓動系統時執行。如何通過C程序在Linux中向控制檯發送廣播消息

如何從我的程序中做到這一點?

問候

馬立克

+0

你有沒有考慮使用[系統日誌(3)](http://man7.org/linux/man-pages/man3/syslog.3.html)和配置的syslogd' '在控制檯上顯示它? –

+0

是的,我剛剛聽說的一個選項,希望避免這種情況,因爲有4個不同的syslog守護進程,如syslog-ng,rsyslog ... – user2018761

+0

將syslog守護進程的配置保留爲sysadmins。但是請準確記錄你的軟件如何使用'syslog(3)';另外,有些系統沒有人類監控的控制檯...... –

回答

2

當前控制檯Linux設備是/dev/console,但你需要root權限才能寫入該文件。 更多信息請參閱控制檯手冊頁,但這裏是摘錄:

啓動控制檯上的過程中常見的方式有:

  • (一)告訴的init(8)(在inittab中( 5))在控制檯上啓動mingetty(8)(或 agetty(8)); (b)詢問openvt(1)在 控制檯上啓動一個進程;
  • (C)啓動X - 它會找到第一個未使用控制檯, 有顯示其輸出(也有古doshell(8)。)
0

要發送消息給多個終端。 /控制檯在各種tty節點上使用ttymsg()

關於如何使用這個的一個很好的例子是你的C程序,結賬source of the walk command。我們可以準確地看到它是如何準備消息緩衝區並將其作爲廣播發送給所有當前登錄用戶的各種終端。

+0

'ttymsg'通常不在Linux中:不在Linux中,不在Linux手冊中記錄。似乎是BSD特定的! –

+0

這ttymsg看起來很有希望,但我找不到它沒有Debian ... – user2018761

+0

**通過在您的程序中添加'#include '** ttymsg()**。它是[**'libutil' **的一部分,可在debian上找到](http://packages.debian.org/cgi-bin/search_contents.pl?word=libutil.so.1&searchmode=searchfiles&case=insensitive&version=unstable&arch = I386)。 – TheCodeArtist

0

對於發送ocasional短消息,最好的(最便攜,最簡單的)方法就是運行wall(1)。

+0

......並且有人可能會看看[**這個答案**](http://stackoverflow.com/a/17827426/319204)以root身份運行一個命令(在這種情況下爲'wall')定期的C程序。 – TheCodeArtist

0

我想避免從我的程序執行其他二進制文件。 來自wall程序的ttymsg和代碼的解決方案對我來說工作得很好。

感謝您的幫助 馬雷克