Sample Header Ad - 728x90

Does a handled SIGINT affect pipe communication with a child process?

0 votes
1 answer
349 views
I have an interactive C program that reads a phrase from the terminal, and computes a series of anagrams. I also have a Perl program that reads and buffers lines from STDIN until receiving a reserved "end of input" token, sorts the lines, organizes them into columns and sends them to STDOUT. The C program uses the BSD/MacOS popen() to start the Perl program with a single bi-directional pipe, and fprintf()'s the anagrams on the pipe until it's generated all the anagrams; sends the "end of input" token, and then issues getline()'s on the pipe to read back and print the formatted results. It works fine normally. But I added a SIGINT handler to the C program so I could interrupt a long-running anagram, print whatever results it had thus far, and loop around for more terminal input. The handler sets a flag that the main program checks after writing to the pipe. If it's set, it breaks out of the anagramming loop and proceeds as if the loop had ended naturally: it sends the end-of-input string, and reads back the formatted results. It breaks out okay; the fprintf end-of-input gets a normal return code; but the first getline returns a null pointer indicating EOF, so I don't get any partial results. The C program continues normally, as intended. I don't find anything in the docs to indicate that a handled SIGINT affects any open pipes, but I can't think what else would be preventing me from receiving anything from the Perl program.
Asked by Chap (389 rep)
Sep 7, 2022, 10:10 PM
Last activity: Sep 26, 2022, 04:25 AM