annotate liboctave/oct-syscalls.cc @ 4062:86e4baa81410

[project @ 2002-09-23 15:38:05 by jwe]
author jwe
date Mon, 23 Sep 2002 15:38:05 +0000
parents 5eef8a2294bd
children 755f6509bb01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
1 /*
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
2
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
3 Copyright (C) 1996, 1997 John W. Eaton
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
4
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
6
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
10 later version.
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
11
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
15 for more details.
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
16
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
20
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
21 */
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
22
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
24 #include <config.h>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
25 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
26
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
27 #include <cerrno>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
28
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
29 #include <string.h>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
30
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
31 #ifdef HAVE_SYS_TYPES_H
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
32 #include <sys/types.h>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
33 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
34
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
35 #ifdef HAVE_UNISTD_H
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
36 #include <unistd.h>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
37 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
38
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
39 #ifdef HAVE_FCNTL_H
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
40 #include <fcntl.h>
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
41 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
42
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
43 #include "oct-syscalls.h"
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
44 #include "str-vec.h"
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
45 #include "syswait.h"
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
46
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
47 #define NOT_SUPPORTED(nm) \
4062
86e4baa81410 [project @ 2002-09-23 15:38:05 by jwe]
jwe
parents: 3504
diff changeset
48 nm ": not supported on this system"
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
49
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
50 int
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
51 octave_syscalls::dup2 (int old_fd, int new_fd)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
52 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
53 std::string msg;
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
54 return dup2 (old_fd, new_fd, msg);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
55 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
56
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
57 int
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
58 octave_syscalls::dup2 (int old_fd, int new_fd, std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
59 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
60 msg = std::string ();
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
61
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
62 int status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
63
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
64 #if defined (HAVE_DUP2)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
65 status = ::dup2 (old_fd, new_fd);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
66
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
67 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
68 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
69 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
70 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
71 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
72 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
73 msg = NOT_SUPPORTED ("dup2");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
74 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
75
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
76 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
77 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
78
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
79 int
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
80 octave_syscalls::execvp (const std::string& file, const string_vector& argv)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
81 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
82 std::string msg;
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
83 return execvp (file, argv, msg);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
84 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
85
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
86 int
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
87 octave_syscalls::execvp (const std::string& file, const string_vector& args,
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
88 std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
89 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
90 msg = std::string ();
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
91
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
92 int status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
93
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
94 #if defined (HAVE_EXECVP)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
95 char **argv = args.c_str_vec ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
96
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
97 status = ::execvp (file.c_str (), argv);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
98
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
99 string_vector::delete_c_str_vec (argv);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
100
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
101 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
102 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
103 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
104 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
105 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
106 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
107 msg = NOT_SUPPORTED ("execvp");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
108 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
109
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
110 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
111 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
112
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
113 int
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
114 octave_syscalls::fcntl (int fd, int cmd, long arg)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
115 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
116 std::string msg;
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
117 return fcntl (fd, cmd, arg, msg);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
118 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
119
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
120 int
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
121 octave_syscalls::fcntl (int fd, int cmd, long arg, std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
122 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
123 msg = std::string ();
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
124
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
125 int status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
126
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
127 #if defined (HAVE_FCNTL)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
128 status = ::fcntl (fd, cmd, arg);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
129
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
130 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
131 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
132 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
133 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
134 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
135 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
136 msg = NOT_SUPPORTED ("fcntl");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
137 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
138
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
139 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
140 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
141
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
142 pid_t
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
143 octave_syscalls::fork (std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
144 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
145 pid_t status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
146
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
147 #if defined (HAVE_FORK)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
148 status = ::fork ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
149
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
150 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
151 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
152 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
153 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
154 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
155 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
156 msg = NOT_SUPPORTED ("fork");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
157 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
158
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
159 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
160 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
161
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
162 pid_t
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
163 octave_syscalls::vfork (std::string& msg)
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
164 {
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
165 pid_t status = -1;
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
166
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
167 #if defined (HAVE_VFORK) || defined (HAVE_FORK)
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
168 #if defined (HAVE_VFORK)
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
169 status = ::vfork ();
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
170 #else
3148
8cdcb8945695 [project @ 1998-02-06 21:25:11 by jwe]
jwe
parents: 3147
diff changeset
171 status = ::fork ();
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
172 #endif
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
173
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
174 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
175 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
176 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
177 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
178 }
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
179 #else
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
180 msg = NOT_SUPPORTED ("vfork");
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
181 #endif
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
182
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
183 return status;
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
184 }
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
185
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2941
diff changeset
186 pid_t
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
187 octave_syscalls::getpgrp (std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
188 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
189 pid_t status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
190
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
191 #if defined (HAVE_GETPGRP)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
192 status = ::getpgrp ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
193
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
194 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
195 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
196 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
197 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
198 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
199 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
200 msg = NOT_SUPPORTED ("getpgrp");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
201 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
202
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
203 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
204 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
205
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
206 pid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
207 octave_syscalls::getpid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
208 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
209 #if defined (HAVE_GETPID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
210 return ::getpid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
211 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
212 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
213 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
214 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
215
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
216 pid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
217 octave_syscalls::getppid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
218 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
219 #if defined (HAVE_GETPPID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
220 return ::getppid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
221 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
222 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
223 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
224 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
225
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
226 gid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
227 octave_syscalls::getgid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
228 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
229 #if defined (HAVE_GETGID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
230 return ::getgid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
231 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
232 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
233 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
234 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
235
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
236 gid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
237 octave_syscalls::getegid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
238 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
239 #if defined (HAVE_GETEGID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
240 return ::getegid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
241 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
242 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
243 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
244 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
245
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
246 uid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
247 octave_syscalls::getuid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
248 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
249 #if defined (HAVE_GETUID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
250 return ::getuid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
251 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
252 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
253 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
254 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
255
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
256 uid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
257 octave_syscalls::geteuid (void)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
258 {
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
259 #if defined (HAVE_GETEUID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
260 return ::geteuid ();
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
261 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
262 return 0;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
263 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
264 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
265
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
266 int
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
267 octave_syscalls::pipe (int *fildes)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
268 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
269 std::string msg;
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
270 return pipe (fildes);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
271 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
272
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
273 int
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
274 octave_syscalls::pipe (int *fildes, std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
275 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
276 msg = std::string ();
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
277
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
278 int status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
279
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
280 #if defined (HAVE_PIPE)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
281 status = ::pipe (fildes);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
282
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
283 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
284 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
285 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
286 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
287 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
288 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
289 msg = NOT_SUPPORTED ("pipe");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
290 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
291
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
292 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
293 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
294
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
295 pid_t
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
296 octave_syscalls::waitpid (pid_t pid, int options)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
297 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
298 std::string msg;
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
299 return waitpid (pid, options, msg);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
300 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
301
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
302 pid_t
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
303 octave_syscalls::waitpid (pid_t pid, int options, std::string& msg)
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
304 {
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
305 msg = std::string ();
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
306
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
307 int status = -1;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
308
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
309 #if defined (HAVE_WAITPID)
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
310 status = ::waitpid (pid, 0, options);
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
311
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
312 if (status < 0)
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
313 {
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
314 using namespace std;
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
315 msg = ::strerror (errno);
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3148
diff changeset
316 }
2941
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
317 #else
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
318 msg = NOT_SUPPORTED ("waitpid");
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
319 #endif
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
320
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
321 return status;
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
322 }
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
323
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
324 /*
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
325 ;;; Local Variables: ***
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
326 ;;; mode: C++ ***
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
327 ;;; End: ***
b779a5b8aed4 [project @ 1997-05-08 02:14:34 by jwe]
jwe
parents:
diff changeset
328 */