Read bytes from a file descriptor
int modem_read( int fd,
int (*cancel)(void) );
- The file descriptor for the device that you want to read from; see
- A pointer to a buffer where the function can store the data.
- The size of the buffer, in bytes.
- The maximum time to wait for more input after receiving at least one
characters, in tenths of a second.
- The maximum time to wait for any input, in tenths of a second.
- Flags that you can use to filter and map received characters; any
- MODEM_ALLOWCASE — preserve the case of incoming
Without this flag, all letters are mapped to lower case.
- MODEM_ALLOWCTRL — allow control characters.
Without this flag, control characters are discarded.
- MODEM_ALLOW8BIT — preserve the top bit of incoming
Without this flag, the top bit is set to zero for all characters.
- MODEM_LASTLINE — discard all previously received
characters when a newline is received followed by more characters.
Without this flag, buf may contain multiple lines.
If an automatic login script may be presented with an arbitrary text
screen before the login prompt, you can use this flag to discard all
but the login line, reducing the possibility of false matches.
- NULL, or a callback that's called whenever the
quiet time period expires while waiting for more input.
Use the -l c option to
to link against this library.
This library is usually included automatically.
||This function is in libc.a, but not in libc.so
(in order to save space).|
The modem_read() function reads up to bufsize bytes
from the device specified by the file descriptor, fd,
and places them into the buffer pointed to by buf.
If no characters are received within the given timeout,
modem_read() returns with -1.
When at least one character has been received, modem_read()
returns if the flow of incoming characters stops for at least the
quiet time period.
The number of characters saved in
buf is returned.
If you provide a cancel function, it's called once each
quiet time period while waiting for input. If this function
returns a nonzero value, modem_read() returns -1 immediately and
sets errno to ETIMEDOUT.
You can use the cancel function
as a callback in a graphical dialer that needs to support a cancel
button to stop a script (see
Zero for success, or -1 on failure
(errno is set).
- The O_NONBLOCK flag is set on this fd,
and the process would have been blocked in trying to perform this operation.
- The argument fd is invalid, or the file isn't opened for reading.
- The readcond() call was interrupted by the process being
- This process isn't currently able to read data from this fd.
- This function isn't supported for this fd.
||Read the Caveats|
||Read the Caveats|
Depending on what you do in your cancel function, modem_read()
may or not be signal handler or thread-safe.