If the server accesses the pipe as...
|
then the client must
access it as...
|
---|---|
I (input)
|
O (output)
|
O (output)
|
S (sequential)
|
U (update)
|
O (output) or S (sequential)
|
/* Creates a pipe called WOMEN, acting */ /* as a server. The server waits 30 */ /* seconds for a client to connect. */ filename women namepipe '\\.\pipe\women' server retry=30; /* This code writes three records into */ /* the named pipe called WOMEN. */ data class; input name $ sex $ age; file women; if upcase(sex)='F' then put name age; datalines; MOORE M 15 JOHNSON F 16 DALY F 14 ROBERTS M 14 PARKER F 13 ;
/* Creates a pipe called WOMEN, acting */ /* as a client. The client waits 30 */ /* seconds for a server to connect. */ filename in namepipe '\\.\pipe\women' client retry=30; data female; infile in; input name $ age; proc print; run;
filename results namepipe '\\.\pipe\results' server retry=60; proc printto print=results new; run; proc summary data=monthly; run;
/* Creates a pipe called SALES, acting */ /* as a server. The server waits 30 */ /* seconds for a client to connect. */ /* After the client has disconnected, */ /* this server SAS session tries to */ /* connect to the next available client */ filename daily namepipe '\\.\pipe\sales' server eofconnect retry=30; /* This program reads in the daily */ /* sales figures sent from each client.*/ data totsales; infile daily; input dept $ item $ total; run;
/* Creates a pipe called SALES, acting */ /* as a client. The client waits forever */ /* for a server to connect. After the */ /* first client has disconnected, the */ /* second client connects with the server.*/ /* The first client is the TOYS dept. */ filename dept1 namepipe '\\.\pipe\sales' client retry=-1; data toys; input item $ total; dept='TOYS'; file dept1; put dept item total; datalines; DOLLS 100 MARBLES 10 BLOCKS 50 GAMES 60 CARS 40 ; /* The second client is the SPORTS dept.*/ /* These data could come from a separate */ /* SAS session. */ filename dept2 namepipe '\\.\pipe\sales' client retry=-1; data sports; input item $ total; dept='SPORTS'; file dept2; put dept item total; datalines; BALLS 30 BATS 65 GLOVES 15 RACKETS 75 FISHING 20 TENTS 115 HELMETS 45 ;
/* Defines a named pipe called LINE. */ /* Use the NOBLOCK option to specify */ /* that if no data are available when */ /* the read is performed, then continue.*/ /* Use the EOFCONNECT option to tell */ /* the server to try to connect with a */ /* new client if an end-of-file is */ /* encountered. Use the RETRY= option */ /* to tell the server to look for any */ /* new clients for 20 seconds. */ filename data namepipe '\\.\pipe\line' server noblock eofconnect retry=20; /* This DATA step reads in all data */ /* from any clients connected to the */ /* named pipe called LINE. */ data all; infile data length=len; input @; /* If the length of the incoming */ /* record is 0, then no data were */ /* found in the pipe; otherwise, */ /* read the incoming data. */ if len ne 0 then do; input machine $ width weight; output; end; run; proc print; run;
/* Defines a named pipe called LINE. */ /* The RETRY= option is set such that */ /* the clients wait forever until a */ /* server is available */ /* (that is, RETRY=-1). */ filename data namepipe '\\.\pipe\line' client retry=-1; /* This is information from the */ /* first machine/client. */ data machine1; file data; input width weight; machine='LINE_1'; put machine width weight; datalines; 5.3 18.2 3.2 14.3 4.8 16.9 6.4 20.8 4.3 15.4 6.1 19.5 5.6 18.9 ; /* This is information from the */ /* second machine/client. */ filename data namepipe '\\.\pipe\line' client retry=-1; data machine2; file data; input width weight; machine='LINE_2'; put machine width weight; datalines; 4.3 17.2 5.2 18.4 6.8 19.9 3.4 14.5 5.3 18.6 4.1 17.1 6.6 19.5 ;
filename data namepipe '\\.\pipe\orders' server noblock eofconnect retry=30; data all; infile data length=len missover; input @; /* If the length of the incoming */ /* record is 0, then no data were */ /* found in the pipe; otherwise, */ /* read the incoming data */ if len ne 0 then do; input operator $ item $ quantity $; if item='' or quantity='' then delete; else output; put operator= item= quantity=; end; /* If no data are being transmitted,*/ /* try reconnecting to the next */ /* available client. */ else do; /* Use the named pipe fileref */ /* as the argument of */ /* CALL RECONNECT. */ call reconnect('data'); end; run;
filename data namepipe '\\.\pipe\orders' client retry=-1; data entry1; if _n_=1 then do; window entry_1 #1 @2 'ENTER STOP WHEN YOU ARE FINISHED' #3 @5 'ITEM NUMBER - ' item $3. #5 @5 'QUANTITY - ' quantity $3.; end; do while (upcase(_cmd_) ne 'STOP'); display entry_1; file data; put 'ENTRY_1' +1 item quantity; item=''; quantity=''; end; stop; run;
filename data namepipe '\\.\pipe\orders' client retry=-1; data entry2; if _n_=1 then do; window entry_2 #1 @2 'ENTER STOP WHEN YOU ARE FINISHED' #3 @5 'ITEM NUMBER - ' item $3. #5 @5 'QUANTITY - ' quantity $3.; end; do while (upcase(_cmd_) ne 'STOP'); display entry_2; file data; put 'ENTRY_2' +1 item quantity; item=''; quantity=''; end; stop; run;