Re: Issue with fcntl FD_CLOEXEC and execve
Yuri Edward <[email protected]> Mon, 22 Jun 2020 19:09:22 +0200
| Newsgroups | org.kernel.vger.linux-c-programming |
|---|---|
| Message-ID | <[email protected]> |
Hello, Thanks a lot for the tip; I changed my fcntl call to the following: "fcntl(myfd, F_SETFD, FD_CLOEXEC)" and that fixed the problem. I can now run and control external processes using the same API across most platforms! I wish the man pages of fcntl could have been clearer about how you were supposed to apply the FD_CLOEXEC flag... Yuri Edward On 6/21/20 9:57 PM, Florian Weimer wrote: > * Yuri Edward: > >> https://github.com/BlockProject3D/Framework/blob/ProcessManagement/Base/src/Framework/System/Process.cpp >> > This is the main class that performs fork, pipe, read, write and > if (fcntl(commonfd[PIPE_WRITE], FD_CLOEXEC, 1) != 0) > > That's not how fcntl works. You need to use F_GETFD and F_SETFD to > set the FD_CLOEXEC flag.