ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/rtprocess.h
Revision: 3.7
Committed: Mon Nov 10 16:41:52 2003 UTC (20 years, 5 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 3.6: +5 -1 lines
Log Message:
Removed redeclaration of fork() call + vfork.h header, using rtprocess.h instead

File Contents

# User Rev Content
1 greg 3.7 /* RCSid $Id: rtprocess.h,v 3.6 2003/10/27 10:19:31 schorsch Exp $ */
2 schorsch 3.1 /*
3     * rtprocess.h
4     * Routines to communicate with separate process via dual pipes
5     *
6     * WARNING: On Windows, there's a system header named <process.h>.
7     */
8     #ifndef _RAD_PROCESS_H_
9     #define _RAD_PROCESS_H_
10    
11 schorsch 3.3 #include <errno.h>
12 schorsch 3.1 #ifdef _WIN32
13 schorsch 3.3 #include <windows.h> /* DWORD etc. */
14 schorsch 3.6 #include <stdio.h>
15 schorsch 3.3 typedef DWORD pid_t;
16     #include <process.h> /* getpid() and others */
17 schorsch 3.5 #define nice(inc) win_nice(inc)
18 schorsch 3.6
19     #ifdef __cplusplus
20     extern "C" {
21     #endif
22     extern FILE *win_popen(char *command, char *type);
23     extern int win_pclose(FILE *p);
24     #ifdef __cplusplus
25     }
26     #endif
27    
28     #define popen(cmd,mode) win_popen(cmd,mode)
29     #define pclose(p) win_pclose(p)
30 schorsch 3.1 #else
31     #include <sys/param.h>
32     #endif
33    
34     #include "paths.h"
35 greg 3.7
36     #if !defined(BSD) || defined(sparc)
37     #define vfork fork
38     #endif
39 schorsch 3.1
40 schorsch 3.4 #ifdef __cplusplus
41     extern "C" {
42     #endif
43 schorsch 3.1
44     /* On Windows, a process ID is a DWORD. That might actually be the
45     same thing as an int, but it's better not to assume anything.
46    
47     This means that we shouldn't rely on PIDs and file descriptors
48     being the same type, so we have to describe processes with a struct,
49     instead of the original int[3]. To keep things simple, we typedef
50     the posix pid_t on those systems that don't have it already.
51     */
52    
53    
54     #ifndef PIPE_BUF
55     #ifdef PIPSIZ
56     #define PIPE_BUF PIPSIZ
57     #else
58     #ifdef PIPE_MAX
59     #define PIPE_BUF PIPE_MAX
60     #else
61     #define PIPE_BUF 512 /* hyperconservative */
62     #endif
63     #endif
64     #endif
65    
66     typedef struct {
67     int r; /* read handle */
68     int w; /* write handle */
69     int running; /* doing something */
70     pid_t pid; /* process ID */
71     } SUBPROC;
72    
73     #define SP_INACTIVE {-1,-1,0,0} /* for static initializations */
74    
75     extern int open_process(SUBPROC *pd, char *av[]);
76     extern int close_process(SUBPROC *pd);
77     extern int process(SUBPROC *pd, char *recvbuf, char *sendbuf, int nbr, int nbs);
78     extern int readbuf(int fd, char *bpos, int siz);
79     extern int writebuf(int fd, char *bpos, int siz);
80 schorsch 3.5
81     #ifdef _WIN32
82     /* any non-negative increment will send the process to IDLE_PRIORITY_CLASS. */
83     extern int win_nice(int inc);
84     #endif
85 schorsch 3.1
86    
87     #ifdef __cplusplus
88     }
89     #endif
90     #endif /* _RAD_PROCESS_H_ */
91