Sponsored Content
Top Forums Programming Simple capturing of keyboard input without interruption Post 303014186 by jim mcnamara on Tuesday 6th of March 2018 03:40:41 PM
Old 03-06-2018
Overview:
I'm not going to figure out all of the above wall of code. This example is how MS windows and X work. A simple, fairly stupid, event (message) pump that does nothing but read stdin, then send it off to a pipe. The little one I call "tiny" your code wall is "big" and it needs to dup() stdin on startup.

What you will do is to steal a tiny bit of windowing architecture - as in a message pump:
interpose a tiny program that loops and reads each character from stdin and then sends everything it gets from stdin to a pipe -except the <return> key. It exits or whatever you need on the return key.

Start the tiny program, have it fork your large program as a child that reads input from a pipe. Big's code can live in the same physical code that tiny lives in. Call fork() on the "big" entry point.

Tiny reads everything and simply passes it on, except in your case tiny exits when the ASCII 13 character (\n) is read. Tiny has almost zero smarts, just calls signal(), read(), wait() and pipe().

If tiny wants to quit: signal big, call wait() on big, then exit().
If big wants to quit: signal tiny, then exit() Tiny's signal handler gets the signal and exits.

If you really get stuck, post your attempt. If executable code lines in the tiny program code exceeds circa 50 lines or so your logic is probably too complex. Add bells and whistles after it works.
This User Gave Thanks to jim mcnamara For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

suppressing keyboard input

Setup Info: This User Id and Password mention below are being used with the ISQL command to connect to a sybase database so they are likely to not be the same as those that were signed on from the session. Situation: Using a korn shell, the shell prompts for a User Id and Password. During the... (1 Reply)
Discussion started by: anthreedhr
1 Replies

2. Programming

Detecting Keyboard Input without return

Hi, I need a way to detect the up and down arrow key inputs for my program. I do not want to wait for the return key to be entered(so that rules out getch() and family). Also I need to process several of these inputs in parallel, by servicing each request with a thread. Is that possible? ... (4 Replies)
Discussion started by: ravneetd
4 Replies

3. Programming

Keyboard Input

Does anyone know how do you determine the user idle time of STDIN in order to log the user out for being idle too long. I would like to write a c program to do this but I it is not clear upon how to determine idle time from keyboard input. I have found that the "who.c" source file uses the last... (4 Replies)
Discussion started by: cpaquette
4 Replies

4. UNIX for Dummies Questions & Answers

Capturing Input Parameters on Shell Script

i have this basic line of code that doesn't work. i simply want to get the input parameter strings but when the script is run it appears that the first parameter is assigning the value to the second parameter. #!/bin/sh pdir=`pwd` p1=$1 p2=$2 echo "directory: $pdir\n" echo "parameter... (2 Replies)
Discussion started by: wtolentino
2 Replies

5. Shell Programming and Scripting

Keyboard input question

How would I change up a script that currently has something like: bash script echo what's 1 2 3 4? then using read 1 2 3 4 I type 1 2 3 4. so in the script i can do stuff like echo $1 $2 $3 $4 and such... i was just doing echo "1 2 3 4"|bash script But was wondering how could I... (5 Replies)
Discussion started by: biopulse
5 Replies

6. Shell Programming and Scripting

Capturing script output and input to log

Hi Is there a way that I can capture a shell script (both output and input) to a log file where I can analyze it? Thanks (6 Replies)
Discussion started by: nimo
6 Replies

7. Shell Programming and Scripting

sed execution with input from keyboard

> sed '' Hello hi Hello output How hi output ^D How > sed should take each line as input, process and output the result. In the above scenario the input is passed from keyboard and the output of 'Hello' as you can see is displayed on the screen after 'hi' is passed as input but not as... (1 Reply)
Discussion started by: loggedin.ksh
1 Replies

8. Shell Programming and Scripting

Capturing multiple values from user input

Hello, I need to capture multiple values from user input and do not know how to do it. I'm writing a script to delete old files, but want to give the option to keep some by asking the user. This is what my output looks like... Old files to be deleted... 1 file1 2 file2 Then this bit of... (3 Replies)
Discussion started by: jrymer
3 Replies

9. Shell Programming and Scripting

How to get input from keyboard with watch?

Hello, i`m trying to create an network monitoring script and i dont know how to make affect that script by pressing an key from keyboard and that script runs not in while or for or any other loop, but with bash command watch for example: i have created an file (for example check) with content... (0 Replies)
Discussion started by: bacarrdy
0 Replies

10. Shell Programming and Scripting

Read input from Keyboard, do not proceed if no input

Hi, I am working on a script, which requests users to enter input. Ex: read -p "Please enter your email id:" email I don't want users skipping this entry, this has to be mandatory.I dont want to proceed without input. I can do a check if variable $email is empty and proceed if not.But, i... (7 Replies)
Discussion started by: aravindadla
7 Replies
runsv(8)						      System Manager's Manual							  runsv(8)

NAME
runsv - starts and monitors a service and optionally an appendant log service SYNOPSIS
runsv service DESCRIPTION
service must be a directory. runsv switches to the directory service and starts ./run. If ./run exits and ./finish exists, runsv starts ./finish. If ./finish doesn't exist or ./finish exits, runsv restarts ./run. If ./run or ./finish exit immediately, runsv waits a second before starting ./finish or restarting ./run. Two arguments are given to ./finish. The first one is ./run's exit code, or -1 if ./run didn't exit normally. The second one is the least significant byte of the exit status as determined by waitpid(2); for instance it is 0 if ./run exited normally, and the signal number if ./run was terminated by a signal. If runsv cannot start ./run for some reason, the exit code is 111 and the status is 0. If the file service/down exists, runsv does not start ./run immediately. The control interface (see below) can be used to start the ser- vice and to give other commands to runsv. If the directory service/log exists, runsv creates a pipe, redirects service/run's and service/finish's standard output to the pipe, switches to the directory service/log and starts ./run (and ./finish) exactly as described above for the service directory. The standard input of the log service is redirected to read from the pipe. runsv maintains status information in a binary format (compatible to the daemontools' supervise program) in service/supervise/status and service/log/supervise/status, and in a human-readable format in service/supervise/stat, service/log/supervise/stat, service/supervise/pid, service/log/supervise/pid. CONTROL
The named pipes service/supervise/control, and (optionally) service/log/supervise/control are provided to give commands to runsv. You can use sv(8) to control the service or just write one of the following characters to the named pipe: u Up. If the service is not running, start it. If the service stops, restart it. d Down. If the service is running, send it a TERM signal, and then a CONT signal. If ./run exits, start ./finish if it exists. After it stops, do not restart service. o Once. If the service is not running, start it. Do not restart it if it stops. p Pause. If the service is running, send it a STOP signal. c Continue. If the service is running, send it a CONT signal. h Hangup. If the service is running, send it a HUP signal. a Alarm. If the service is running, send it a ALRM signal. i Interrupt. If the service is running, send it a INT signal. q Quit. If the service is running, send it a QUIT signal. 1 User-defined 1. If the service is running, send it a USR1 signal. 2 User-defined 2. If the service is running, send it a USR2 signal. t Terminate. If the service is running, send it a TERM signal. k Kill. If the service is running, send it a KILL signal. x Exit. If the service is running, send it a TERM signal, and then a CONT signal. Do not restart the service. If the service is down, and no log service exists, runsv exits. If the service is down and a log service exists, runsv closes the standard input of the log service, and waits for it to terminate. If the log service is down, runsv exits. This command is ignored if it is given to service/log/supervise/control. Example: to send a TERM signal to the socklog-unix service, either do # sv term /etc/service/socklog-unix or # printf t >/etc/service/socklog-unix/supervise/control printf(1) usually blocks if no runsv process is running in the service directory. CUSTOMIZE CONTROL
For each control character c sent to the control pipe, runsv first checks if service/control/c exists and is executable. If so, it starts service/control/c and waits for it to terminate, before interpreting the command. If the program exits with return code 0, runsv refrains from sending the service the corresponding signal. The command o is always considered as command u. On command d first service/control/t is checked, and then service/control/d. On command x first service/control/t is checked, and then service/control/x. The control of the optional log service cannot be customized. SIGNALS
If runsv receives a TERM signal, it acts as if the character x was written to the control pipe. EXIT CODES
runsv exits 111 on an error on startup or if another runsv is running in service. runsv exits 0 if it was told to exit. SEE ALSO
sv(8), chpst(8), svlogd(8), runit(8), runit-init(8), runsvdir(8), runsvchdir(8), utmpset(8) http://smarden.org/runit/ AUTHOR
Gerrit Pape <pape@smarden.org> runsv(8)
All times are GMT -4. The time now is 07:35 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy