I am guessing you do not want signal handling at all, other than cleaning up open files and buffers when your app gets a SIGTERM, for example.
Why?
read.
This says you are designing an app that has an associated process that is doing reads.
Consider another standard IPC model instead. They are a much better choice if you must do reads in one process.
Overview:
http://www.tldp.org/LDP/tlk/ipc/ipc.html
Pipes are great, they are very like playing with files.
The GNU C Library: Creating a Pipe
Shared memory among processes is also a great feature. You can atomically set a variable in shared memory, then execute a read into a buffer there.
Use semaphores for traffic control. This one is straightforward to get right.
shm_overview(7) - Linux manual page
Overall, consider getting a copy of 3rd Edition of Stevens & Rago 'Advanced Programming in the UNIX Environment'. Michael Kerrisk has done the same thing purely for Linux - 'The LINUX Programming Interface'
Both of these have great examples of all of IPC, and explain how not to shoot yourself in the foot. Like you seemed to want to do. They fully cover signals as well, if you cannot change your system design, and have to continue into the Dark Side.
Have a good New Year!