Number of bytes in terminal input queue w/o blocking and consuming?


 
Thread Tools Search this Thread
Top Forums Programming Number of bytes in terminal input queue w/o blocking and consuming?
# 1  
Old 01-29-2009
Number of bytes in terminal input queue w/o blocking and consuming?

Hello, everyone.

Could someone, please, tell me how to get the number of bytes in the terminal input queue without blocking and without consuming these bytes? I guess it could be called the peek functionality.

I've looked at termio tcgetattr() and tcsetattr() functions but could not find exactly what I need. I know I can poll() on stdin. But I don't want to read after poll() returns. I just want to see how many characters, if any, can be read without blocking from stdin - terminal in my case.

Thanks for any hints.
Lucy.
# 2  
Old 01-29-2009
poll() and select() returning guarantees that an attempted read will not block, it does not guarantee what will happen - error condition, EOF, whatever.

This is what POSIX says:
Quote:
A descriptor shall be considered ready for reading when a call to an input function with O_NONBLOCK clear would not block, whether or not the function would transfer data successfully. (The function might return data, an end-of-file indication, or an error other than one indicating that it is blocked, and in each of these cases the descriptor shall be considered ready for reading.)
Plus, there is no way to know how many bytes can be read if a read were successful.
Try just reading a single byte then poll() or select().
# 3  
Old 01-30-2009
Number of bytes in terminal input queue w/o blocking and consuming?

Thank you for your reply, Jim. This is not going to work. Reading data means it will be removed from the terminal input queue. That is not what I want. I am not interested in data. I am interested in how much data is available. Similar to recv( MSG_PEEK) for sockets.
There is no way to do this with section two read/write. Hence, this post. And, hence, my idea that answer lies in the bowls of termio. Any termio gurus out there?
# 4  
Old 01-30-2009
There is no standard API for returning this information. You need to use the FIONREAD ioctl if it is available on your platform. Typical code would be something like the following.
Code:
  #include <sys/ioctl.h>

  int chars_avail;
  int result;

  result = ioctl (tty, FIONREAD, &chars_avail);

# 5  
Old 01-30-2009
You are a genius, fpmurphy.
It works.
On Sun Solaris I had to include <sys/filio.h>
Notes: tested it with
1). nothing typed - character count is zero.
2). something typed, but not followed by Enter key - character count is zero.
3). something typed followed by Enter key - character count includes new line.

It's ok, since default input mode is canonical - line oriented. At this point I can play with setting the terminal to raw mode hoping to get character count regardless of user hitting Enter or not, but that becomes application specific and the problem in general is solved.

fpmurphy, thanks again.
Lucy.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script - entered input(1-40 bytes) needs to be converted exactly 40 bytes

hello, suppose, entered input is of 1-40 bytes, i need it to be converted to 40 bytes exactly. example: if i have entered my name anywhere between 1-40 i want it to be stored with 40 bytes exactly. enter your name: donald duck (this is of 11 bytes) expected is as below - display 11... (3 Replies)
Discussion started by: shravan.300
3 Replies

2. UNIX for Dummies Questions & Answers

X bytes of 0, Y bytes of random data, Z bytes of 5, T bytes of 1. ??

Hello guys. I really hope someone will help me with this one.. So, I have to write this script who: - creates a file home/student/vmdisk of 10 mb - formats that file to ext3 - mounts that partition to /mnt/partition - creates a file /mnt/partition/data. In this file, there will... (1 Reply)
Discussion started by: razolo13
1 Replies

3. Shell Programming and Scripting

Bash script to find the number of files and identify which ones are 0 bytes.

I am writing a bash script to find out all the files in a directory which are empty. I am running into multiple issues. I will really appreciate if someone can please help me. #!/bin/bash DATE=$(date +%m%d%y) TIME=$(date +%H%M) DIR="/home/statsetl/input/civil/test" ... (1 Reply)
Discussion started by: monasharma13
1 Replies

4. Programming

How to get the number of bytes parsed in libxml2

Hi, I am using the libxml2 sax parser to parse a in memory xml string along with validating it against a schema. I am using the following code: xmlSAXHandlerPtr sax_ = new xmlSAXHandler(); sax_->initialized = XML_SAX2_MAGIC; sax_->startElementNs =... (0 Replies)
Discussion started by: Sam Krishna
0 Replies

5. Shell Programming and Scripting

awk: Input line Cannot be longer than 3,000 bytes.

Guys, I want to get the high CPU utilization from top. I am using below code : top -d2 >> /home/dba_monitoring/host_top_output.txt echo "Script started `date`" > $runlog usage=`grep "^ *$1" /home/dba_monitoring/host_top_output.txt | awk '{print $12}' | sed 's/%//'` And getting below... (7 Replies)
Discussion started by: wahab
7 Replies

6. Shell Programming and Scripting

count of files and number of bytes

1) I need a shell code to count the number of files ( without directories or sub-directories ) in a directory given as arguments I tried this code but it didn't work , maybe I tried the wrong one: numOfFiles=`find $1 -type f -maxdepth 1 | wc -l` I found it in another thread in this site.. ... (17 Replies)
Discussion started by: jack1985
17 Replies

7. AIX

Maximum number of Print Queue on AIX?

Hi, Currently we are experiencing qdaemon died, hourly. We have more than 10,000 print queue on AIX 5.3. Would this cause the qdaemon to die? What is the maximum number of print queue on AIX 5.3? Thank you in advance. (0 Replies)
Discussion started by: raybakh
0 Replies

8. Shell Programming and Scripting

AWK input can not be longer than 3000 bytes

Hi, i have following line in my code. eport.pl < $4 | dos2ux | head -2000 | paste -sd\| - | awk -v S="$1" ' Issue is, i get a message saying "awk:input line | found /file/path cannot be longer than 3000 bytes." "source line number is 3" Can someone help me with this please? (4 Replies)
Discussion started by: usustarr
4 Replies

9. UNIX for Dummies Questions & Answers

Display just CPU run queue number (Nothing Else)

Im using the vmstat command to display the CPU run queue, but i want to put that into a program so is there a way to just display the number under the r? Thanks, (1 Reply)
Discussion started by: RAFC_99
1 Replies

10. Shell Programming and Scripting

Help on counting number of bytes in a field

Hi, I have a file that has 300 records with a load of fields. two of them are: field_1 has between 8-9 bytes i.e. 012345678, 0123456789 field_2 has 10 bytes i.e. 01234567890 I want to be able to echo out the total of each of these fields i.e. 200 (have 8 - 9 bytes) 100 (have 10 bytes)... (3 Replies)
Discussion started by: Pablo_beezo
3 Replies
Login or Register to Ask a Question