|
|
1.1 ! root 1: /* ! 2: Subprocess.h (v10) ! 3: by Charles L. Oei ! 4: pty support by Joe Freeman ! 5: with encouragement from Kristofer Younger ! 6: Subprocess Example, Release 2.0 ! 7: NeXT Computer, Inc. ! 8: ! 9: You may freely copy, distribute and reuse the code in this example. ! 10: NeXT disclaims any warranty of any kind, expressed or implied, as to ! 11: its fitness for any particular use. ! 12: */ ! 13: ! 14: #import <objc/Object.h> ! 15: #import <stdio.h> ! 16: ! 17: /* ! 18: This subprocess object sends/receives data to/from any UNIX ! 19: subprocess asynchronously (via vfork/pipe). ! 20: Its delegate, if any, will receive the following messages: ! 21: ! 22: - subprocessDone; ! 23: // sent when the subprocess exits ! 24: ! 25: - subprocessOutput:(char *)buffer; ! 26: // sent whenever there is data on the standard output pipe; ! 27: // buffer is only valid until next call ! 28: ! 29: - subprocessError:(const char *)errorString; ! 30: // sent when an error occurs; ! 31: // if it ever happens, it's usually only at startup time ! 32: */ ! 33: ! 34: ! 35: #define BUFFERSIZE 2048 ! 36: ! 37: @interface Subprocess:Object ! 38: { ! 39: FILE *fpToChild; ! 40: int fromChild; ! 41: int childPid; ! 42: id delegate; ! 43: int masterPty; // file descriptor for master/slave pty ! 44: int slavePty; ! 45: int bufferCount; ! 46: char outputBuffer[BUFFERSIZE]; ! 47: } ! 48: ! 49: - init:(const char *)subprocessString; ! 50: // a cover for the below withDelegate:nil, andPtySupport:NO, andStdErr:YES ! 51: ! 52: - init:(const char *)subprocessString ! 53: withDelegate:theDelegate ! 54: andPtySupport:(BOOL)wantsPty ! 55: andStdErr:(BOOL)wantsStdErr; ! 56: // optional requests for pseudo terminal support and ! 57: // redirecting the standard error stream thru standard output ! 58: ! 59: - send:(const char *)string withNewline:(BOOL)wantNewline; ! 60: // send the string optionally followed by a new line ! 61: - send:(const char *)string; ! 62: // sends the string followed by a new line ! 63: // shorthand for above withNewline:YES ! 64: - terminateInput; ! 65: // sends an end-of-file (EOF) to the subprocess ! 66: // (and closes input pipe to child) ! 67: - terminate:sender; ! 68: // forces the subprocess to terminate (w/ SIGTERM) ! 69: ! 70: - setDelegate:anObject; ! 71: - delegate; ! 72: ! 73: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.