make code POSIX compliant - bsleep - Unnamed repository; edit this file 'description' to name the repository.
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit 34d8a2829e40b14f76b6b212cda8e1dada80b1b0
DIR parent a3d47929ad00f036aabe8bd131d65f612260861d
HTML Author: kroovy <me@kroovy.de>
Date: Fri, 21 Feb 2025 01:26:15 +0100
make code POSIX compliant
Diffstat:
M bsleep.c | 37 +++++++++++++++++++------------
1 file changed, 23 insertions(+), 14 deletions(-)
---
DIR diff --git a/bsleep.c b/bsleep.c
@@ -1,35 +1,44 @@
+#define _POSIX_SOURCE
#include <signal.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/types.h>
#include <unistd.h>
int
main(void)
{
- int i,in,pid;
+ int i, in;
+ pid_t pid;
+
+ if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) {
+ perror("signal");
+ exit(EXIT_FAILURE);
+ }
pid = fork();
- if (pid == 0) {
+ switch (pid) {
+ case -1:
+ perror("fork");
+ exit(EXIT_FAILURE);
+ case 0:
/* child */
for (i=1;;i++) {
- printf("%d ", i); fflush(stdout); /* comment out if you prefer silent */
+ printf("%d ", i); fflush(stdout);
sleep(1);
}
- return 0;
-
- } else if (pid > 0) {
+ exit(EXIT_SUCCESS);
+ default:
/* parent */
- system ("/bin/stty raw");
+ printf("Child is PID %jd\n", (intmax_t) pid);
+ system("/bin/stty raw");
while ((in = getchar()) != 'b') {
printf("%c ", in);
}
- system ("/bin/stty cooked");
+ kill(pid, SIGKILL);
+ system("/bin/stty cooked");
printf("\n");
- kill(pid, SIGKILL); /* kill child */
- return 0;
-
- } else {
- return -1;
+ exit(EXIT_SUCCESS);
}
- return 0;
}