1<- Back /phlog kroovy.de 70 i Err kroovy.de 70 ibsleep - Breakable sleep in C Err kroovy.de 70 i============================= Err kroovy.de 70 i Err kroovy.de 70 iA couple of days ago I stumbled upon an improvised breakable sleep. Err kroovy.de 70 iI wrote about in another post: Err kroovy.de 70 12024-06-25 - bsleep (bashism) /phlog/bsleep.gph kroovy.de 70 i Err kroovy.de 70 iSince I generally strife to get independant from the use of bashisms, I Err kroovy.de 70 idecided to rewrite bsleep in C. Err kroovy.de 70 i Err kroovy.de 70 iAnd here we go... Err kroovy.de 70 i Err kroovy.de 70 iBreakable sleep in C. The button 'b' breaks the sleep. This can be used Err kroovy.de 70 ito chain two tasks on the commandline, with the second task only waiting Err kroovy.de 70 ifor you to press 'b'. Err kroovy.de 70 i Err kroovy.de 70 i git clone git://kroovy.de/bsleep Err kroovy.de 70 i Err kroovy.de 70 iBuild dependencies Err kroovy.de 70 i- C compiler Err kroovy.de 70 i- libc Err kroovy.de 70 i Err kroovy.de 70 iThis program is meant to help people complete tasks on the commandline. Err kroovy.de 70 iAlso the source code can be studied as a simple approach to forking a Err kroovy.de 70 iprocess in C. Err kroovy.de 70 i Err kroovy.de 70 i #include Err kroovy.de 70 i #include Err kroovy.de 70 i #include Err kroovy.de 70 i #include Err kroovy.de 70 i Err kroovy.de 70 i int Err kroovy.de 70 i main(void) Err kroovy.de 70 i { Err kroovy.de 70 i int i,in,pid; Err kroovy.de 70 i pid = fork(); Err kroovy.de 70 i Err kroovy.de 70 i if (pid == 0) { Err kroovy.de 70 i /* child */ Err kroovy.de 70 i for (i=1;;i++) { Err kroovy.de 70 i printf("%d ", i); fflush(stdout); /* comment out if you prefer silent */ Err kroovy.de 70 i sleep(1); Err kroovy.de 70 i } Err kroovy.de 70 i return 0; Err kroovy.de 70 i Err kroovy.de 70 i } else if (pid > 0) { Err kroovy.de 70 i /* parent */ Err kroovy.de 70 i system ("/bin/stty raw"); Err kroovy.de 70 i while ((in = getchar()) != 'b') { Err kroovy.de 70 i printf("%c ", in); Err kroovy.de 70 i } Err kroovy.de 70 i system ("/bin/stty cooked"); Err kroovy.de 70 i printf("\n"); Err kroovy.de 70 i kill(pid, SIGKILL); /* kill child */ Err kroovy.de 70 i return 0; Err kroovy.de 70 i Err kroovy.de 70 i } else { Err kroovy.de 70 i return -1; Err kroovy.de 70 i } Err kroovy.de 70 i return 0; Err kroovy.de 70 i } Err kroovy.de 70 i Err kroovy.de 70 hasciinema URL:https://asciinema.org/a/8zUsN5SjoixAZjRvcOURs0lG2 kroovy.de 70 i Err kroovy.de 70 iFootnote: Err kroovy.de 70 iThe invocation of the operating system command "/bin/stty" via system() Err kroovy.de 70 iis not the most elegant. At the moment this needed to read the character Err kroovy.de 70 iwithout the need to press Enter. Err kroovy.de 70 iIf possible I will try to replace the call system("/bin/stty ...") in the Err kroovy.de 70 ifuture. Err kroovy.de 70 12024-06-30 - bsleep (rewritten in C) /phlog/bsleep-c.gph kroovy.de 70 .