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?

Original source