ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/rtprocess.h
Revision: 3.17
Committed: Tue Mar 20 17:45:07 2018 UTC (6 years, 1 month ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2
Changes since 3.16: +2 -1 lines
Log Message:
Added Windows _execvp()

File Contents

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