interprocess
Libtubo Interprocess Communication 4.5.0
Libtubo Interprocess Communication is a small and simple library to run processes in the background and communicate via stdout. more>>
The functionality of libtubo is similar to the glib function g_spawn_async_with_pipes(), except that all pipe setup and monitoring is taken care of.
The calling function only has to provide the functions with which to process the input/output of the remote process.
The library first appeared in the year 2000 in the xfce3 desktop as part of the xfsamba application, and is now available for use for other developers.
Enhancements:
- Some control bugfixes.
- The version has been updated to the xffm scheme, as this package is now distributed with xffm.
Interprocess Communication Server(unix) 1.07
Interprocess synchronization and communication primitives for C++ more>> RIPC is library providing interprocess synchronization and communication capabilities for processes running at different network nodes. RIPC provides wide set of standard primitives: semaphore, event, FIFO queue, barrier, shared memory, shared and exclusive locks.
Structure of RIPC package
RIPC package consists of two libraries:
ripcclient.lib
Provides stubs of RIPC primitives sending requests to the server
ripcserver.lib
Server implementation of RIPC primitives
RIPC supports local and remote sessions. Remote sessions created by RIPCClientFactory class establish connection with the server through TCP/IP stream socket. Server process should be started before clients. In this case primitives at local computer servers as stubs and redirect requests to the server. This mode is useful to provide synchronization and communication between several processes at the same or different computers.
Local sessions are created by RIPCServerFactory class. Them are useful to provide synchronization of threads within the same process (if you want to use more sophisticated synchronization primitives than standard synchronization facilities provided by OS). The single local session can be shared by all threads. No server process should be started in this case.
Quick start
Include files needed for use of RIPC package are located in inc directory. Libraries are located in lib directory. Version of RIPC for windows is provided with binaries of these librarier and server built by Visual C++ comiler. At all other system you will have to build these libraries yourself. Change directory to src and exceute make (for Visual C++ RIPC provides make.bat file which invokes MS nmake utility for makefile.mvc). By default static version of librarier are built. To produce dynamically linked librariers, edit makefile and assign set GENERATE_DLL=1. In case of using DLL libraries do not forget to include them in PATH (at Windows) or in LD_LIBRARY_PATH (at Unix).<<less
GnuPG::Interface 0.33
GnuPG::Interface is a Perl interface to GnuPG. more>>
SYNOPSIS
# A simple example
use IO::Handle;
use GnuPG::Interface;
# settting up the situation
my $gnupg = GnuPG::Interface->new();
$gnupg->options->hash_init( armor => 1,
homedir => /home/foobar );
# Note you can set the recipients even if you arent encrypting!
$gnupg->options->push_recipients( ftobin@cpan.org );
$gnupg->options->meta_interactive( 0 );
# how we create some handles to interact with GnuPG
my $input = IO::Handle->new();
my $output = IO::Handle->new();
my $handles = GnuPG::Handles->new( stdin => $input,
stdout => $output );
# Now well go about encrypting with the options already set
my @plaintext = ( foobar );
my $pid = $gnupg->encrypt( handles => $handles );
# Now we write to the input of GnuPG
print $input @plaintext;
close $input;
# now we read the output
my @ciphertext = ;
close $output;
waitpid $pid, 0;
GnuPG::Interface and its associated modules are designed to provide an object-oriented method for interacting with GnuPG, being able to perform functions such as but not limited to encrypting, signing, decryption, verification, and key-listing parsing.
How Data Member Accessor Methods are Created
Each module in the GnuPG::Interface bundle relies on Class::MethodMaker to generate the get/set methods used to set the objects data members. This is very important to realize. This means that any data member which is a list has special methods assigned to it for pushing, popping, and clearing the list.
Understanding Bidirectional Communication
It is also imperative to realize that this package uses interprocess communication methods similar to those used in IPC::Open3 and "Bidirectional Communication with Another Process" in perlipc, and that users of this package need to understand how to use this method because this package does not abstract these methods for the user greatly. This package is not designed to abstract this away entirely (partly for security purposes), but rather to simply help create proper, clean calls to GnuPG, and to implement key-listing parsing. Please see "Bidirectional Communication with Another Process" in perlipc to learn how to deal with these methods.
Using this package to do message processing generally invovlves creating a GnuPG::Interface object, creating a GnuPG::Handles object, setting some options in its options data member, and then calling a method which invokes GnuPG, such as clearsign. One then interacts with with the handles appropriately, as described in "Bidirectional Communication with Another Process" in perlipc.
SpoonRPC 0.1.1
SpoonRPC is a python module that provides a distributed communication system for interprocess communication. more>>
Main features:
- Safe, efficient object serialization with ASN.1 BER
- Simple, easy messaging between nodes
- Message routing
- Transport agnostic, just needs a stream of some kind.
- Can create ad-hoc networks of nodes with multiple links for reliability
- Licensed under the MIT license.
poonRPC provides the ability to connect many different processes together and send messages between them. The processes can be running across any number of hosts. Security is up to the implementation, but by using SSL or paramiko adding a layer of security is easy.
A message consists of a string to identify the message type, and an arbitrary object attachment. Messages can be dispatched, by the message type, to functions by using a decorator. Arbitrary python objects are serialized using BER, however only the data members of the object are serialized. Code cannot be serialized, this is a feature, not an oversight. Each process must have a copy of the class for the objects serialized.
Each node has one or more links to other nodes which forms a larger network of nodes. Messages are routed using a dynamic routing algorithm, the most efficient route is chosen as nodes and links come and go. This allows nodes that do not have a direct connection between eachother to communicate.
Klicker 1.04
Klicker is a KDE/QT based metronome. more>>
IPC::PubSub 0.22
IPC::PubSub is Perl module for Interprocess Publish/Subscribe channels. more>>
SYNOPSIS
# A new message bus with the DBM::Deep backend
# (Other possible backends include Memcached and PlainHash)
my $bus = IPC::PubSub->new(DBM_Deep => /tmp/pubsub.db);
# A channel is any arbitrary string
my $channel = #perl6;
# Register a new publisher (you can publish to multiple channels)
my $pub = $bus->new_publisher("#perl6", "#moose");
# Publish a message (may be a complex object) to those channels
$pub->msg("This is a message");
# Register a new subscriber (you can subscribe to multiple channels)
my $sub = $bus->new_subscriber("#moose");
# Publish an object to channels
$pub->msg("This is another message");
# Set all subsequent messages from this publisher to expire in 30 seconds
$pub->expiry(30);
$pub->msg("This message will go away in 30 seconds");
# Simple get: Returns the messages sent since the previous get,
# but only for the first channel.
my @msgs = $sub->get;
# Simple get, with an explicit channel key (must be among the ones
# it initially subscribed to)
my @moose_msgs = $sub->get("#moose");
# Complex get: Returns a hash reference from channels to array
# references of [timestamp, message].
my $hash_ref = $sub->get_all;
# Changing the list of channels we subscribe to
$sub->subscribe(some-other-channel);
$sub->unsubscribe(some-other-channel);
# Changing the list of channels we publish to
$pub->publish(some-other-channel);
$pub->unpublish(some-other-channel);
# Listing and checking if we are in a channel
my @sub_channels = $sub->channels;
my @pub_channels = $pub->channels;
print "Sub is in #moose" if $sub->channels->{#moose};
print "Pub is in #moose" if $pub->channels->{#moose};
# Raw cache manipulation APIs (not advised; use ->modify instead)
$bus->lock(channel);
$bus->unlock(channel);
my @timed_msgs = $bus->fetch(key1, key2, key3);
$bus->store(key, value, time, 30);
# Atomic updating of cache content; $_ is stored back on the
# end of the callback.
my $rv = $bus->modify(key => sub { delete $_->{foo} });
# Shorthand for $bus->modify(key => sub { $_ = val });
$bus->modify(key => val);
# Shorthand for $bus->modify(key => sub { $_ });
$bus->modify(key);
This module provides a simple API for publishing messages to channels and for subscribing to them.
When a message is published on a channel, all subscribers currently in that channel will get it on their next get or get_all call.
Currently, it offers three backends: DBM_Deep for on-disk storage, Memcached for possibly multi-host storage, and PlainHash for single-process storage.
Please see the tests in t/ for this distribution, as well as "SYNOPSIS" above, for some usage examples; detailed documentation is not yet available.
EJOE 0.4.0
EJOE is a lightweight Java client/server component built to send and receive objects through pluggable serialization mechanisms. more>>
EJOE porject offers a high-performance, simple, and clean object request broker (whereby ORB is meant in its natural manner and not in its relation with CORBA), with server and client components for your client/server applications.
Its an highly scaleable implementation of the common request-process-response pattern based on java NIO. It does support optional remote class loading to avoid redundant classpath entries, but doesnt require stubs and/or proxy objects.
EJOE offers three things - and ONLY these three things for you:
- a multithreaded, high performance network IO server as well as a corresponding client component
- (de)serializing of input objects send by (your) clients and return objects provided by your business logic
- a simple, clean and unique interface to integrate a object request broker into your applications
How does it work?
Basically EJOE follows a network based request-process-response pattern:
You integrate the client component into your frontend/client tier and the server component into your backend/server tier.
Your client(s) sends requests to the server. The EJOE client component and server component handle all the network stuff as well as serialization/deserialization for you. The server component hands-over received requests to your business logic and sends the return values back to the client. Not more, not less.
The interface between the EJOE server component and your business logic has a simple and clean design. That means your adapter implementation has to decide what should happen with client requests.
For example its a usual pattern to send java.util.Map objects as requests, put all parameters into the map and use a special key identifying the required business logic to handle the request. Your adapter inspects the map and invokes the according business logic for such an identifier. Instead of maps you can use all possible kinds of objects as requests and or responses.
As for the moment EJOE is in an early development stage even if it already seems to work very well.
Enhancements:
- There are many bugfixes, and many new features were added.
- Remote reflection, different serialization strategies, support for the concurrency package of Java 5, Crispy and WSIF extensions, partial HTTP support, and support for interprocess communication within the same Java virtual machine are the most important improvements.
- It is considered stable and ready for use in production environments.
Joshs Website Framework 1.0
Joshs Website Framework is a CMS framework for PHP Web developers. more>>
The Auth Engine provides both level-based permissions (e.g., must be level 100 to access this page) and name-based permissions (e.g., must be in "editor" group to access this page).
Utilities include Mutex and SharedData classes (for interprocess communication), site-wide custom error handling, and the ability to take a site offline for maintenance.
Xffm-filemanager 4.5.0
Xffm-filemanager is a filemanager based on interprocess communication. more>>
The Xffm-filemanager has three different GUIs:
- Xffm-iconview: a spatial iconview filemanager
- Xffm-deskview: a desktop view for ~/Desktop folder (or other)
- Xffm-treeview: a treeview filemanager
Enhancements:
- The Xffm filemanager is now a separate package from the xffm file management library and the xffm-gui library.
IPC::LDT 2.03
IPC::LDT is a Perl module that implements a length based IPC protocol. more>>
Interprocess communication often uses line (or record) oriented protocols. FTP, for example, usually is such a protocol: a client sends a command (e.g. "LS") which is completed by a carriage return. This carriage return is included in the command which is sent to the server process (FTP deamon) which could implement its reading in a way like this:
while ($cmd= )
{
chomp($cmd);
performCommand($cmd);
}
Well, such record oriented, blocked protocols are very useful and simply to implement, but sometimes there is a need to transfer more complex data which has no trailing carriage return, or data which may include more carriage returns inside the message which should not cause the reciepient to think the message is already complete while it is really not. Even if you choose to replace carriage returns by some obscure delimiters, the same could happen again until you switch to a protocol which does not flag the end of a message by special strings.
On the other hand, if there is no final carriage return (or whatever flag string) within a message, the end of the message has to be marked another way to avoid blocking by endless waiting for more message parts. A simple way to provide this is to precede a message by a prefix which includes the length of the remaining (real) message. A reciepient reads this prefix, decodes the length information and continues reading until the announced number of bytes came in.
IPC::LDT provides a class to build objects which transparently perform such "length driven transfer". A user sends and receives messages by simple method calls, while the LDT objects perform the complete translation into and from LDT messages (with prefix) and all the necessary low level IO handling to transfer stream messages on non blocked handles.
IPC::LDT objects can be configured to transfer simle string messages as well as complex data structures. Additionally, they allow to delay the transfer of certain messages in a user defined way.
Rapid Application Development Library 2.8.3
Rapid Application Development Library 2.8.3 is yet another excellent utility you should not miss. It is actually a C language library developed to abstract details of interprocess communications and more>>
Rapid Application Development Library 2.8.3 is yet another excellent utility you should not miss. It is actually a C language library developed to abstract details of interprocess communications and common linux/unix system facilities so that application developers can concentrate on application solutions. It encourages developers (whether expert or novice) to use a proven paradigm of event-driven, asynchronous design. By abstracting interprocess messaging, events, timers, and any I/O device that can be represented as a file descriptor, radlib simplifies the implementation of multi-purpose processes, as well as multi-process applications.
Radlib greatly improves typical process performance through the use of shared memory buffers to avoid costly "malloc" and "free" library calls. These buffers are used for interprocess messages. radlib utilizes shared memory constructs to provide global message queue management and global "Queue Groups" for increased interprocess communications flexibility. All shared resources are semaphore protected to avoid issues with concurrent access.
In short, radlib is a sincere attempt to provide real-time OS capability on a non-real-time OS. It has been successfully deployed on linux, MacOSX and FreeBSD but there is no reason it would not build and run on any flavor of unix supporting System V IPC.
Specifically, radlib provides fast system buffers, a simple config file utility, events, doubly-linked lists, process logging through syslog, message queues, semaphores, shared memory utilities, timers, stacks, state machine utilities, a process framework, a process management utility to start/stop groups of processes, optional MySQL or PostgreSQL database API, a straightforward TCP/streams socket API, a UDP/datagram unicast/multicast/broadcast API, CRC and SHA utility APIs, and other assorted system utilities.
An example application template is provided in the distribution (see the "Example Application Template" link in the left column of this page). The template example serves two purposes: it demonstrates, through source code inspection, how a well constructed radlib process is implemented and it provides an example build environment with the capability for someone new to radlib to build and execute an example application "right out of the box".
Proprietary forms of radlib have been used in several mission-critical commercial applications with excellent results. It is light yet very powerful and efficient in real time. radlib is BSD-licensed (free to use in binary or source forms) and distributed as source to be built on the target platform. Build instructions are included in the distribution. See the file "COPYING" in the distribution for details concerning open source software and the BSD license.
Major Features:
- Includes SQLite3 support.
- Can be used on both 32 and 64 bit platforms with no special configuration required.
- Supports native development on the LinkSys NSLU2 as well as binary package support for radlib applications. See the README file for details.
- Includes a new message router daemon and API. This new paradigm simplifies interprocess communications substantially. See radmsgRouter.h for details.
- Includes a new example template which demonstrates multiprocess applications and the new message router API. See template/README in the distro for details.
- Built with libtool which generates shared libraries as well as static if supported on the build platform. Header files are now C++ friendly and radlib can be linked with C++ applications. LIST and LIST_ID were changed to RADLIST and RADLIST_ID to avoid problems with newer versions of MySQL.
- Includes SHA-1, SHA-256 and CRC16/32 utilities. See the header files "radsha.h" and "radcrc.h" for details.
Streams 0.1.7
Streams is an I/O library designed to eventually replace the current I/O facilities based on using Handles. more>>
3rd-party librarie can easily add new stream types and new common functionality. Other benefits of the new library include support for streams functioning in any monad, Hugs and GHC compatibility, high speed, and an easy migration path from the existing I/O library. It is heavily based on the HVIO module written by John Goerzen.
Simple Streams
The key concept of the lib is the Stream class, whose interface mimics familiar interface for Handles, just with "h" replaced with "v" in function names:
class (Monad m) => Stream m h where
vPutStrLn :: h -> String -> m ()
vGetContents :: h -> m String
vIsEOF :: h -> m Bool
vClose :: h -> m ()
....................
This means that you already know how to use any stream! The Stream interface currently has 8 implementations: a Handle itself, raw files, pipes, memory buffers and string buffers. Future plans include support for memory-mapped files, sockets, circular memory buffers for interprocess communication and UArray-based streams.
By themselves, these Stream implementations are rather simple.
Basically, to implement new Stream type, its enough to provide vPutBuf/vGetBuf operations, or even vGetChar/vPutChar. The latter way, although inefficient, allows us to implement streams that can work in any monad. StringReader and StringBuffer streams use this to provide string-based Stream class implementations both for IO and ST monads. Yes, you can use the full power of Stream operations inside the ST monad!
Tom's Unique Personal Information Manager 1.5
Toms Unique Personal Information Manager provides you with a professional and effective hierarchical personal data manager which is designed for single users. more>>
Tom's Unique Personal Information Manager 1.5 provides you with a professional and effective hierarchical personal data manager which is designed for single users. Schemas and data are stored in XML.
Enhancements:
- This release was changed to support GTK 2.6, since it reads internal GTK tree/list data for performance reasons.
- Signed number masks are now correctly handled.
- Zip codes support Zip+4.
- A message is printed on stderr when data is saved, allowing tupim to participate in interprocess communication, for instance, as an options dialog.
- The fact that self-referencing tables are not allowed is now documented.
- Other minor fixes were made.
Requirements: GTK+ version 2.6.x
CMU Common Lisp 19d
CMU Common Lisp is a common Lisp compiler and runtime more>>
Main features:
- a sophisticated native-code compiler which is capable of powerful type inferences, and generates code competitive in speed with C compilers.
- generational garbage collection and multiprocessing capability on the x86 ports.
- a foreign function interface which allows interfacing with C code and system libraries, including shared libraries on most platforms, and direct access to Unix system calls.
- support for interprocess communication and remote procedure calls.
- an implementation of CLOS, the Common Lisp Object System, which includes multimethods and a metaobject protocol.
- a graphical source-level debugger using a Motif interface, and a code profiler.
- an interface to the X11 Window System (CLX), and a sophisticated graphical widget library (Garnet).
- programmer-extensible input and output streams.
- an Emacs-like editor implemented in Common Lisp.
- freely redistributable: free, with full source code (most of which is in the public domain) and no strings attached (and no warranty). Like the GNU/Linux and *BSD operating systems, CMUCL is maintained and improved by a team of volunteers collaborating over the Internet.
Common Lisp is well suited to large programming projects and explorative programming. The language has a dynamic semantics which distinguishes it from languages such as C and Ada.
It features automatic memory management, an interactive incremental development environment, a module system, a large number of powerful data structures, a large standard library of useful functions, a sophisticated object system supporting multiple inheritance and generic functions, an exception system, user-defined types and a macro system which allows programmers to extend the language.
Enhancements:
- A new float type EXT:DOUBLE-DOUBLE-FLOAT is supported.
- A DOUBLE-DOUBLE-FLOAT uses two DOUBLE-FLOATs to represent a number with >= 106 bits of precision (about 33 digits).
- Hash tables now support weak value, weak key- and-value, and weak key-or-value tables.
- LONG-LONG and UNSIGNED-LONG-LONG are recognized types in the C-CALL package for signed and unsigned 64-bit integers.
- The generational garbage collector has been ported to Darwin/ PPC.
- Numerous bugs and ANSI-compliance problems have been fixed.
radlib 2.2.5
radlib is a C language library developed to abstract details of interprocess communications. more>>
It encourages developers (whether expert or novice) to use a proven paradigm of event-driven, asynchronous design.
By abstracting interprocess messaging, events, timers, and any I/O device that can be represented as a file descriptor, radlib simplifies the implementation of multi-purpose processes, as well as multi-process applications.
radlib greatly improves typical process performance through the use of shared memory buffers to avoid costly "malloc" and "free" library calls.
These buffers are also used for interprocess messages. radlib also utilizes shared memory constructs to provide global message queue management and global "Queue Groups" for increased interprocess communications flexibility.
All shared resources are semaphore protected to avoid issues with concurrent access.
In short, radlib is a sincere attempt to provide real-time OS capability on a non-real-time OS. It has been successfully deployed on linux, MacOSX and FreeBSD but there is no reason it would not build and run on any flavor of unix supporting System V IPC.
Specifically, radlib provides fast system buffers, a simple config file utility, events, doubly-linked lists, process logging through syslog, message queues, semaphores, shared memory utilities, timers, stacks, state machine utilities, a process framework, a process management utility to start/stop groups of processes, optional MySQL or PostgreSQL database API, straightforward TCP/streams socket API, and other assorted system utilities.
Enhancements:
- hanged some database field processing to comply with the postgresql changes made in version 8.
- Page: 1 of 1
- 1