Leaving an infinite while loop in C
c, while-loop
Solution
Try this and see what happens:
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
volatile sig_atomic_t stop;
void
inthand(int signum)
{
stop = 1;
}
int
main(int argc, char **argv)
{
signal(SIGINT, inthand);
while (!stop)
pause();
printf("exiting safely\n");
return 0;
}
Ctrl-C sends a signal (SIGINT) to your process. The default action for the process is to exit when it gets it, but you can catch the signal instead and handle it gracefully.
Problem
I have a loop that constantly reads from my serial port. The loop is infinite, so the only way I know of stopping the program is by using `Ctrl+C`. The problem with this solution, which I suspect is causing other problems as well, is that when I use `Ctrl+C`, my program ends abruptly. At the end of the program, I close the connection to the file descriptor of the serial port I am accessing, but I don't think my program ever reaches that because of me using the `Ctrl+C` command, which just stops the program exactly where it is. Is there a way for me to create the infinite while loop, and exit when I want, but at the same time, maintain the capability to execute the code beneath it?