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.