- Notifications
You must be signed in to change notification settings - Fork 31.8k
/
Copy pathdup2.c
37 lines (34 loc) · 930 Bytes
/
dup2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
* Public domain dup2() lookalike
* by Curtis Jackson @ AT&T Technologies, Burlington, NC
* electronic address: burl!rcj
*
* dup2 performs the following functions:
*
* Check to make sure that fd1 is a valid open file descriptor.
* Check to see if fd2 is already open; if so, close it.
* Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd.
* Return fd2 if all went well; return BADEXIT otherwise.
*/
#include<errno.h>// errno
#include<fcntl.h>// fcntl()
#include<unistd.h>// close()
#defineBADEXIT -1
int
dup2(intfd1, intfd2)
{
if (fd1!=fd2) {
#ifdefF_DUPFD
if (fcntl(fd1, F_GETFL) <0)
returnBADEXIT;
if (fcntl(fd2, F_GETFL) >= 0)
close(fd2);
if (fcntl(fd1, F_DUPFD, fd2) <0)
returnBADEXIT;
#else
errno=ENOTSUP;
returnBADEXIT;
#endif
}
returnfd2;
}