Ruby
2.5.0dev(2017-10-22revision60238)
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
Data Structure Index
+
Data Fields
+
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
+
Files
File List
+
Globals
+
All
$
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Functions
$
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
y
z
+
Variables
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
+
Typedefs
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
y
+
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
v
y
+
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
+
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
missing
dup2.c
Go to the documentation of this file.
1
/*
2
* Public domain dup2() lookalike
3
* by Curtis Jackson @ AT&T Technologies, Burlington, NC
4
* electronic address: burl!rcj
5
*
6
* dup2 performs the following functions:
7
*
8
* Check to make sure that fd1 is a valid open file descriptor.
9
* Check to see if fd2 is already open; if so, close it.
10
* Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd.
11
* Return fd2 if all went well; return BADEXIT otherwise.
12
*/
13
14
#include "ruby/config.h"
15
16
#if defined(HAVE_FCNTL)
17
# include <fcntl.h>
18
#endif
19
20
#if !defined(HAVE_FCNTL) || !defined(F_DUPFD)
21
# include <errno.h>
22
#endif
23
24
#define BADEXIT -1
25
26
int
27
dup2
(
int
fd1,
int
fd2)
28
{
29
#if defined(HAVE_FCNTL) && defined(F_DUPFD)
30
if
(fd1 != fd2) {
31
#ifdef F_GETFL
32
if
(
fcntl
(fd1, F_GETFL) < 0)
33
return
BADEXIT
;
34
if
(
fcntl
(fd2, F_GETFL) >= 0)
35
close(fd2);
36
#else
37
close(fd2);
38
#endif
39
if
(
fcntl
(fd1,
F_DUPFD
, fd2) < 0)
40
return
BADEXIT
;
41
}
42
return
fd2;
43
#else
44
extern
int
errno
;
45
int
i, fd, fds[256];
46
47
if
(fd1 == fd2)
return
0;
48
close(fd2);
49
for
(i=0; i<256; i++) {
50
fd = fds[i] = dup(fd1);
51
if
(fd == fd2)
break
;
52
}
53
while
(i) {
54
close(fds[i--]);
55
}
56
if
(fd == fd2)
return
0;
57
errno = EMFILE;
58
return
BADEXIT
;
59
#endif
60
}
F_DUPFD
#define F_DUPFD
Definition:
win32.h:581
fcntl
int fcntl(int, int,...)
Definition:
win32.c:4297
dup2
int dup2(int fd1, int fd2)
Definition:
dup2.c:27
errno
int errno
BADEXIT
#define BADEXIT
Definition:
dup2.c:24
Generated by
1.8.13