Plumber (program)
It is proposed that this article be deleted because of the following concern:
If you can address this concern by improving, copyediting, sourcing, renaming, or merging the page, please edit this page and do so. You may remove this message if you improve the article or otherwise object to deletion for any reason. Although not required, you are encouraged to explain why you object to the deletion, either in your edit summary or on the talk page. If this template is removed, do not replace it. The article may be deleted if this message remains in place for seven days, i.e., after 15:48, 10 September 2024 (UTC). Find sources: "Plumber" program – news · newspapers · books · scholar · JSTOR |
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
|
The plumber, in the Plan 9 from Bell Labs and Inferno operating systems, is a mechanism for reliable uni- or multicast inter-process communication of formatted textual messages. It uses the Plan 9 network file protocol, 9P, rather than a special-purpose IPC mechanism.[1]
Any number of clients may listen on a named port (a file) for messages. Ports and port routing are defined by plumbing rules. These rules are dynamic. Each listening program receives a copy of matching messages. For example, if the data /sys/lib/plumb/basic is plumbed with the standard rules, it is sent to the edit port. The port will write a copy of the message to each listener. In this case, all running editors will interpret this message as a file name, and open the file.
The plumber is the 9P file server that provides this service. Clients may use libplumb to format messages. Since the messages are 9P, they are network transparent.
Example
[edit]The following is an example of plumbing rules:
# these are generally in order from most specific to least, # since first rule that fires wins. addr=':(#?[0−9]+)' protocol='(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais)' domain='[a−zA−Z0−9_@]+([.:][a−zA−Z0−9_@]+)*/?[a−zA−Z0−9_?,%#~&/\−]+' file='([:.][a−zA−Z0−9_?,%#~&/\−]+)*' # image files go to page type is text data matches '[a−zA−Z0−9_\−./]+' data matches '([a−zA−Z0−9_\−./]+).(jpe?g|gif|bit)' arg isfile $0 plumb to image plumb start page −w $file # URLs go to web browser type is text data matches $protocol://$domain$file plumb to web plumb start window webbrowser $0 # existing files, possibly tagged by line number, go to edit/sam type is text data matches '([.a−zA−Z0−9_/–]+[a−zA−Z0−9_/\−])('$addr')?' arg isfile $1 data set $file attr add addr=$3 plumb to edit plumb start window sam $file # .h files are looked up in /sys/include and passed to edit/sam type is text data matches '([a−zA−Z0−9]+\.h)('$addr')?' arg isfile /sys/include/$1 data set $file attr add addr=$3 plumb to edit plumb start window sam $file
See also
[edit]References
[edit]- ^ Pike, Rob (2000). "2000 USENIX Annual Technical Conference". www.usenix.org. Retrieved 2024-04-15.
External links
[edit]- Plan 9 Programmer's Manual, Volume 1 –
- Plan 9 Programmer's Manual, Volume 1 –
- Plan 9 Programmer's Manual, Volume 1 –
- Plan 9 Programmer's Manual, Volume 1 –
- "Plumbing and Other Utilities" by Rob Pike
- A port of plumber to Unix-like operating systems
- Plumbing extension for urxvt