With either the sigaction or threads, you have the problem of how to announce to the rest of the application that the data is available and complete.

I'm not sure what you mean by "continuous" though. You have a sleep(1) in there, so is that really any different from calling poll() once a second, then reading the whole data?

What is the "rest of the program" doing (a short description)?