fd_util: added function pipe_cloexec()
Same as pipe_cloexec_nonblock(), but doesn't set non-blocking mode.
This commit is contained in:
parent
6975c087e0
commit
3d2a9d3545
|
@ -139,6 +139,30 @@ creat_cloexec(const char *path_fs, int mode)
|
|||
return fd;
|
||||
}
|
||||
|
||||
int
|
||||
pipe_cloexec(int fd[2])
|
||||
{
|
||||
#ifdef WIN32
|
||||
return _pipe(event_pipe, 512, _O_BINARY);
|
||||
#else
|
||||
int ret;
|
||||
|
||||
#ifdef HAVE_PIPE2
|
||||
ret = pipe2(fd, O_CLOEXEC);
|
||||
if (ret >= 0 || errno != ENOSYS)
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
ret = pipe(fd);
|
||||
if (ret >= 0) {
|
||||
fd_set_cloexec(fd[0], true);
|
||||
fd_set_cloexec(fd[1], true);
|
||||
}
|
||||
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
pipe_cloexec_nonblock(int fd[2])
|
||||
{
|
||||
|
@ -158,10 +182,8 @@ pipe_cloexec_nonblock(int fd[2])
|
|||
fd_set_cloexec(fd[0], true);
|
||||
fd_set_cloexec(fd[1], true);
|
||||
|
||||
#ifndef WIN32
|
||||
fd_set_nonblock(fd[0]);
|
||||
fd_set_nonblock(fd[1]);
|
||||
#endif
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -55,6 +55,13 @@ open_cloexec(const char *path_fs, int flags);
|
|||
int
|
||||
creat_cloexec(const char *path_fs, int mode);
|
||||
|
||||
/**
|
||||
* Wrapper for pipe(), which sets the CLOEXEC flag (atomically if
|
||||
* supported by the OS).
|
||||
*/
|
||||
int
|
||||
pipe_cloexec(int fd[2]);
|
||||
|
||||
/**
|
||||
* Wrapper for pipe(), which sets the CLOEXEC flag (atomically if
|
||||
* supported by the OS).
|
||||
|
|
Loading…
Reference in New Issue