ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/rtprocess.h
Revision: 3.10
Committed: Wed Jan 28 12:42:22 2004 UTC (20 years, 3 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R6
Changes since 3.9: +7 -5 lines
Log Message:
Created our own RT_PID instead of hijacking pid_t on Windows.

File Contents

# Content
1 /* RCSid $Id: rtprocess.h,v 3.9 2003/11/14 17:22:06 schorsch Exp $ */
2 /*
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 #include <errno.h>
12 #ifdef _WIN32
13 #include <windows.h> /* DWORD etc. */
14 #include <stdio.h>
15 typedef DWORD RT_PID;
16 #include <process.h> /* getpid() and others */
17 #define nice(inc) win_nice(inc)
18
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 #else
31 #include <stdio.h>
32 #include <sys/param.h>
33 #include <sys/types.h>
34 typedef pid_t RT_PID;
35 #endif
36
37 #include "paths.h"
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 /* On Windows, a process ID is a DWORD. That might actually be the
44 same thing as an int, but it's better not to assume anything.
45
46 This means that we shouldn't rely on PIDs and file descriptors
47 being the same type, so we have to describe processes with a struct,
48 instead of the original int[3]. For that purpose, we typedef a
49 platform independent RT_PID.
50 */
51
52
53 #ifndef PIPE_BUF
54 #ifdef PIPSIZ
55 #define PIPE_BUF PIPSIZ
56 #else
57 #ifdef PIPE_MAX
58 #define PIPE_BUF PIPE_MAX
59 #else
60 #define PIPE_BUF 512 /* hyperconservative */
61 #endif
62 #endif
63 #endif
64
65 typedef struct {
66 int r; /* read handle */
67 int w; /* write handle */
68 int running; /* doing something */
69 RT_PID pid; /* process ID */
70 } SUBPROC;
71
72 #define SP_INACTIVE {-1,-1,0,0} /* for static initializations */
73
74 extern int open_process(SUBPROC *pd, char *av[]);
75 extern int close_process(SUBPROC *pd);
76 extern int process(SUBPROC *pd, char *recvbuf, char *sendbuf, int nbr, int nbs);
77 extern int readbuf(int fd, char *bpos, int siz);
78 extern int writebuf(int fd, char *bpos, int siz);
79
80 #ifdef _WIN32
81 /* any non-negative increment will send the process to IDLE_PRIORITY_CLASS. */
82 extern int win_nice(int inc);
83 #endif
84
85
86 #ifdef __cplusplus
87 }
88 #endif
89 #endif /* _RAD_PROCESS_H_ */
90