Annotation of researchv10dc/man/adm/man3/ipc.3, revision 1.1.1.1

1.1       root        1: .TH IPC 3X
                      2: .CT 2 comm_proc
                      3: .SH NAME
                      4: ipccreat, ipcopen, ipclisten, ipcaccept, ipcreject, ipcexec, ipcpath , ipclogin, ipcrogin
                      5: \(mi set up connections between processes or machines
                      6: .SH SYNOPSIS
                      7: .B #include <ipc.h>
                      8: .PP
                      9: .B char *ipcpath(name, network, service)
                     10: .br
                     11: .B char *name;
                     12: .br
                     13: .B char *network;
                     14: .br
                     15: .B char *service;
                     16: .PP
                     17: .B int ipcopen(name, param)
                     18: .br
                     19: .B char *name;
                     20: .br
                     21: .B char *param;
                     22: .PP
                     23: .B int ipccreat(name, param)
                     24: .br
                     25: .B char *name;
                     26: .br
                     27: .B char *param;
                     28: .PP
                     29: .B ipcinfo *ipclisten(fd)
                     30: .br
                     31: .B int fd;
                     32: .PP
                     33: .B int ipcaccept(ip)
                     34: .br
                     35: .B ipcinfo *ip;
                     36: .PP
                     37: .B int ipcreject(ip, no, str)
                     38: .br
                     39: .B ipcinfo *ip;
                     40: .br
                     41: .B int no;
                     42: .br
                     43: .B char *str;
                     44: .PP
                     45: .B int ipcexec(name, param, cmd)
                     46: .br
                     47: .B char *name;
                     48: .br
                     49: .B char *param;
                     50: .br
                     51: .B char *cmd;
                     52: .PP
                     53: .B int ipclogin(fd)
                     54: .br
                     55: .B int fd;
                     56: .PP
                     57: .B int ipcrogin(fd, opt)
                     58: .br
                     59: .B int fd;
                     60: .br
                     61: .B char *opt;
                     62: .PP
                     63: .B extern char *errstr;
                     64: .SH DESCRIPTION
                     65: These routines establish communication between unrelated
                     66: processes, often for networking purposes.
                     67: They are loaded by the
                     68: .B -lipc
                     69: option of
                     70: .IR ld (1).
                     71: .PP
                     72: End points in the network are identified by names of the form:
                     73: .BR element [ !element "]... "  .
                     74: The name is translated element by element relative to the name space
                     75: selected by the previous element.
                     76: The first element is always a name in the local file system.
                     77: By convention, all network interfaces and services
                     78: mount themselves in
                     79: .FR /cs .
                     80: For example:
                     81: .TP
                     82: .B /cs/exec
                     83: refers to a local process which has mounted itself (via
                     84: .I ipccreat )
                     85: on 
                     86: .FR /cs/exec .
                     87: .TP
                     88: .B /cs/dk!nj/astro/voice
                     89: refers to a voice synthesizer attached
                     90: to Datakit; process
                     91: .F /cs/dk
                     92: is the Datakit interface.
                     93: .TP
                     94: .B /cs/dk!dutoit!exec
                     95: is the process that has mounted itself on
                     96: .F /cs/exec
                     97: in machine `dutoit'.
                     98: .PP
                     99: .I Ipcpath,
                    100: forms a network name from its arguments and returns a pointer to it.
                    101: It takes three arguments: the destination
                    102: .I name,
                    103: the default
                    104: .I network,
                    105: and the default
                    106: .I service.
                    107: It assumes that 
                    108: .I name
                    109: is a three part name of the form: network!host!service.
                    110: If either network or service is missing from
                    111: .I name, ipcpath
                    112: supplies them
                    113: from the default arguments.
                    114: It then tacks a
                    115: .F /cs
                    116: on the front and returns a pointer to that.
                    117: Thus,
                    118: .IP
                    119: .EX
                    120: ipcpath("dutoit", "dk", "dcon")
                    121: .EE
                    122: .LP
                    123: returns a pointer to the string 
                    124: .LR /cs/dk!dutoit!dcon .
                    125: .PP
                    126: .I Ipcopen
                    127: places a call to a named network end point and returns
                    128: a file descriptor for the resulting connection.
                    129: .I Param,
                    130: a whitespace-delimited string of values, specifies
                    131: properties which the connection must have.
                    132: At present four parameter values are defined:
                    133: .TF heavy
                    134: .TP
                    135: .B heavy
                    136: .br
                    137: .ns
                    138: .TP
                    139: .B light
                    140: Heavy (usually computer-to-computer) or light (computer-to-terminal)
                    141: traffic is expected.
                    142: .TP
                    143: .B delim
                    144: The connection must support delimiters; see
                    145: .IR stream (4).
                    146: .TP
                    147: .B hup
                    148: .B SIGHUP
                    149: must be generated at end of file; see
                    150: .IR signal (2).
                    151: .PD
                    152: .PP
                    153: .I Ipccreat
                    154: attaches a process to a name space.
                    155: It returns a file descriptor representing the attachment.
                    156: .I Name 
                    157: and
                    158: .I param
                    159: mean the same as for 
                    160: .I ipcopen.
                    161: .PP
                    162: .I Ipclisten
                    163: waits for calls (from
                    164: .I ipcopen
                    165: in other processes) appearing on file descriptor
                    166: .I fd
                    167: (obtained from
                    168: .IR ipccreat ).
                    169: When a call arrives, it returns an
                    170: .B ipcinfo
                    171: structure, defined in
                    172: .FR <ipc.h> :
                    173: .IP
                    174: .EX
                    175: .ta \w'typedef\ 'u +\w'char\ 'u +\w'reserved[5];\ 'u
                    176: typedef        struct {
                    177:        int     reserved[5];
                    178:        char    *name;          that being dialed
                    179:        char    *param;         parameters used to set up call
                    180:        char    *machine;       machine id of caller
                    181:        char    *user;          user name of caller
                    182:        int     uid, gid;       uid, gid of caller
                    183: } ipcinfo;
                    184: .EE
                    185: .PP
                    186: The call may be accepted by
                    187: .I ipcaccept
                    188: or rejected by
                    189: .I ipcreject.
                    190: .I Ipcaccept
                    191: returns a file descriptor for the connection.
                    192: .I Ipcreject
                    193: takes an integer error number and an error message string,
                    194: which will be passed back to the caller as
                    195: .I errno
                    196: and 
                    197: .I errstr.
                    198: .PP
                    199: A higher-level routine,
                    200: .I ipcexec,
                    201: executes the command,
                    202: .I cmd,
                    203: on a named machine.
                    204: The file descriptor returned by 
                    205: .I ipcexec
                    206: is the standard input, standard output, and 
                    207: standard error of the command.
                    208: As in
                    209: .I ipcopen,
                    210: .I param
                    211: lists properties required of the channel.
                    212: .PP
                    213: Once a connection is established using
                    214: .I ipcopen
                    215: it is often necessary to authenticate yourself
                    216: to the destination.
                    217: This is done using 
                    218: .I ipclogin
                    219: and
                    220: .I ipcrogin.
                    221: .I Ipclogin
                    222: runs the client side of the authentication protocol
                    223: described in
                    224: .IR svcmgr (8)
                    225: for the 
                    226: .I v9auth
                    227: action.
                    228: The supplied
                    229: .I fd
                    230: is the descriptor returned by 
                    231: .I ipcopen.
                    232: Until the authentication is accepted,
                    233: .I ipclogin
                    234: will prompt the user (using
                    235: .F /dev/tty )
                    236: for a login id and password to be sent over
                    237: .I fd.
                    238: .PP
                    239: .I Ipcrogin
                    240: runs the client side of the authentication protocol
                    241: used by BSD's 
                    242: .I rlogin 
                    243: and 
                    244: .I rsh
                    245: services.
                    246: Unlike
                    247: .I ipclogin,
                    248: it will not prompt the user if the authentication
                    249: fails.
                    250: .I Ipcrogin
                    251: takes a second argument that is written to
                    252: .I fd
                    253: after the authentication is accepted.
                    254: .SH EXAMPLES
                    255: To connect to the voice synthesizer attached to the Datakit:
                    256: .EX
                    257: .ta \w'12345678'u +\w'12345678'u +\w'12345678'u
                    258: #include <ipc.h>
                    259: main() {
                    260:        int fd;
                    261:        fd = ipcopen(ipcpath("voice", "dk", 0), "light");
                    262:        if(fd<0){
                    263:                printf("can't connect: %s\en", errstr);
                    264:                exit(1);
                    265:        }
                    266:        ...
                    267:        close(fd);
                    268: }
                    269: .EE
                    270: .PP
                    271: To place a Dataphone call via Datakit; the service name is 
                    272: derived in an obvious way from the ACU service class; see
                    273: .IR dialout (3).
                    274: .EX
                    275:        fd = ipcopen(ipcpath("9-1-201-582-0000", "dk", "dial1200"), "light");
                    276: .EE
                    277: .PP
                    278: To announce as a local service and wait for incoming calls:
                    279: .EX
                    280: .ta \w'12345678'u +\w'12345678'u +\w'12345678'u
                    281: #include <ipc.h>
                    282: main() {
                    283:         int fd;
                    284:         ipcinfo *ip;
                    285:         fd = ipccreat("/tmp/service", 0);
                    286:         if(fd<0){
                    287:                 printf("can't announce: %s\en", errstr);
                    288:                 exit(1);
                    289:         }
                    290:         while(ip = ipclisten(fd)){
                    291:                 int nfd;
                    292:                 if(i_hate_this_user(ip->machine, ip->user)) {
                    293:                         ipcreject(ip, EACCES, "i hate you");
                    294:                         continue;
                    295:                 }
                    296:                 nfd = ipcaccept(ip);
                    297:                ...
                    298:                 close(nfd);
                    299:         }
                    300:         printf("lost the announced connection somehow\en");
                    301:         exit(1);
                    302: }
                    303: .EE
                    304: .SH FILES
                    305: .TF /cs/tpc
                    306: .TP 
                    307: .F /cs/dk
                    308: the announce point for the Datakit dialer
                    309: .TP
                    310: .F /cs/tcp
                    311: the announce point for the internet dialer
                    312: .SH SEE ALSO
                    313: .IR dialout (3),
                    314: .IR connld (4),
                    315: .IR dkmgr (8),
                    316: .IR svcmgr (8),
                    317: .IR tcpmgr (8)
                    318: .br
                    319: D. L. Presotto,
                    320: `Interprocess Communication in the Eighth Edition
                    321: .SM UNIX
                    322: System',
                    323: this manual, Volume 2
                    324: .SH DIAGNOSTICS
                    325: Integer return values of \-1 and pointer return
                    326: values of 0 denote error.
                    327: .I Errno
                    328: contains an error code (see
                    329: .IR intro (2))
                    330: and
                    331: .I errstr
                    332: points to an explanatory string.
                    333: .SH BUGS
                    334: Files created by
                    335: .I ipccreat
                    336: in the local name space are not removed when
                    337: the file descriptor returned by
                    338: .I ipccreat
                    339: is closed.
                    340: .br
                    341: Information in
                    342: .B ipcinfo
                    343: is no more trustworthy than its origin.
                    344: Information, such as user name, sent by foreign
                    345: machines may be suspect.
                    346: On Ethernet or dialup connections (but not on Datakit)
                    347: machine names can be forged.
                    348: Let's not even think about wire-swappers and wiretappers.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.