Home
initial commit - bsleep - Unnamed repository; edit this file 'description' to name the repository. DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit a3d47929ad00f036aabe8bd131d65f612260861d HTML Author: kroovy <me@kroovy.de> Date: Sun, 30 Jun 2024 18:49:18 +0200 initial commit Diffstat: A .gitignore | 2 ++ A LICENSE | 15 +++++++++++++++ A Makefile | 16 ++++++++++++++++ A README | 19 +++++++++++++++++++ A bsleep.c | 35 +++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 0 deletions(-) --- DIR diff --git a/.gitignore b/.gitignore @@ -0,0 +1,2 @@ +gopherproxy +*.o DIR diff --git a/LICENSE b/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2024 kroovy <me@kroovy.de> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. DIR diff --git a/Makefile b/Makefile @@ -0,0 +1,16 @@ +.POSIX: + +BIN = bsleep +OBJ = $(BIN:=.o) + +LDFLAGS += -static -Wall -Wextra -pedantic + +all: $(BIN) + +$(BIN): $(OBJ) + $(CC) $(OBJ) $(LDFLAGS) -o $@ + +$(OBJ): Makefile + +clean: + rm -f $(BIN) $(OBJ) DIR diff --git a/README b/README @@ -0,0 +1,19 @@ +bsleep + +Breakable sleep. The button 'b' breaks the sleep. This can be used to +chain two tasks on the commandline, with the second task only waiting for +you to press 'b'. + +Build dependencies +- C compiler +- libc + +This program is meant to help people complete tasks on the commandline. +Also the source code can be studied as a simple approach to forking a +process. + +The invocation of the operating system command "/bin/stty" via system() +is not the most elegant. At the moment this needed to read the character +without the need to press Enter. +If possible I will try to replace the call system("/bin/stty ...") in the +future. DIR diff --git a/bsleep.c b/bsleep.c @@ -0,0 +1,35 @@ +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +int +main(void) +{ + int i,in,pid; + pid = fork(); + + if (pid == 0) { + /* child */ + for (i=1;;i++) { + printf("%d ", i); fflush(stdout); /* comment out if you prefer silent */ + sleep(1); + } + return 0; + + } else if (pid > 0) { + /* parent */ + system ("/bin/stty raw"); + while ((in = getchar()) != 'b') { + printf("%c ", in); + } + system ("/bin/stty cooked"); + printf("\n"); + kill(pid, SIGKILL); /* kill child */ + return 0; + + } else { + return -1; + } + return 0; +}