ipc
Inter process communicator.
📝Syntax
O = ipc(pid, 'eval', cmd)
B = ipc(pid, 'isvar', name, scope)
V = ipc(pid, 'get', name)
V = ipc(pid, 'get', name, scope)
TF = ipc(pid, 'minimize')
ipc(pid, 'post', cmd)
ipc(pid, 'post', cmd, scope)
ipc(pid, 'put', var, name)
ipc(pid, 'put', var, name, scope)
ipc(pid, 'minimize', tf)
📥Input Arguments
Parameter Description
'post' a string: post a command to evaluate to another nelson's process in base scope (not blocking).
'eval' a string: post a command to evaluate to another nelson's process in base scope (blocking).
'isvar' a string: check if a variable exists into another nelson's process.
'put' a string: send a variable into another nelson's process.
'get' a string: get a variable from another nelson's process.
'minimize' a string: minimize main window from another nelson's process.
📤Output Arguments
Parameter Description
B a logical: true if variable exists.
V a variable from another nelson.
TF a logical: true if destination process is minimized.
O a character array: output of evaluate string.
📄Description

ipc allows to execute, get, put variables between multiple nelson's process.

All serializable nelson's types are supported. Unsupported types will be replaced by an empty matrix and a warning.

LIMITATION:

The limit for the size of data transferred is 5000x5000 double. On 32 bits architecture, 1024x1024 double.

Current limitation to limit memory usage.

💡Examples
master_pid = getpid()
initial_pids = getpid('available')

% Creates 4 nelsons process
N = 4;
for i = 1:N
    cmd = sprintf('nelson-gui -e MASTER_PID=%d &', i);
    unix(cmd);
    sleep(5)
end
current_pids = getpid('available')

% wait clients ready
for p = current_pids
    if p ~= master_pid
        while(~ipc(p, 'isvar', 'MASTER_PID')), sleep(1), end
    end
end

% Creates random matrix in others Nelson
n = 0;
for p = current_pids
    if p ~= master_pid
        cmd = sprintf('rng(%d);M = rand(10, 10); disp(M)', n);
        ipc(p, 'post', cmd);
        n = n + 1;
    end
end

% Creates a matrix with matrix from others Nelson
C = [];
for p = current_pids
    if p ~= master_pid
        R = ipc(p, 'get', 'M');
        C = [C; R]
        n = n + 1;
    end
end

% close all clients
for p = current_pids
    if p ~= master_pid
        ipc(p, 'post', 'exit')
    end
end
ipc(getpid(), 'eval', 'dir')
ipc(getpid(), 'minimize', true)
ipc(getpid(), 'minimize')
🔗See Also
getpidunixeval
🕔Version History
Version Description
1.0.0 initial version
Edit this page on GitHub