From b5ba7f5524e763df8778574f5503730722381375 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Tue, 26 Jan 2021 12:56:51 +0000 Subject: add SIGINT handler for correct exit --- parecord/parecord.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'parecord') diff --git a/parecord/parecord.c b/parecord/parecord.c index 55434a0..fff705d 100644 --- a/parecord/parecord.c +++ b/parecord/parecord.c @@ -1,11 +1,19 @@ #include #include - +#include #include #define BUFSIZE 1024 +volatile sig_atomic_t flag_do = 1; -int loop_write(int fd, const void *data, size_t size) { +void handler(int s) +{ + signal(SIGINT, handler); + flag_do = 0; +} + +int loop_write(int fd, const void *data, size_t size) +{ int ret = 0; while(size > 0) { @@ -27,6 +35,7 @@ int loop_write(int fd, const void *data, size_t size) { int main(int argc, char *argv[]) { + signal(SIGINT, handler); pa_sample_spec ss; ss.format = PA_SAMPLE_S16LE; ss.channels = 2; @@ -43,28 +52,29 @@ int main(int argc, char *argv[]) NULL, NULL); if(!s) { - fprintf(stderr, "pa_simple_new() failed\n"); + fprintf(stderr, "[Error] pa_simple_new() failed\n"); return 1; } - for(;;) { + fprintf(stderr, "[Message] Use \"Ctrl + C\" for exit\n"); + while(flag_do) { uint8_t buf[BUFSIZE]; // Record some data if(pa_simple_read(s, buf, sizeof(buf), NULL) < 0) { - fprintf(stderr, "pa_simple_read() failed\n"); + fprintf(stderr, "[Error] pa_simple_read() failed\n"); return 1; } // And write it to STDOUT */ if(loop_write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf)) { - fprintf(stderr, "write() failed\n"); + fprintf(stderr, "[Error] write() failed\n"); return 1; } } if(s) - pa_simple_free(s); + pa_simple_free(s); return 0; } \ No newline at end of file -- cgit v1.2.3-18-g5258