char is_digit ( char x )
return ( ( x >= '0' ) & ( x <= '9' ) );
unsigned char *str = "this12 i321s a90 string";
unsigned char t;
int cnt = 0;
while ( *str )
cnt += is_digit( *str++ );
printf("Hello world! %i\n", cnt);
fopen, fdopen, freopen - stream open functions
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
fdopen(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
The fopen() function opens the file whose name is the string pointed to by path and associates a stream with
The argument mode points to a string beginning with one of the following sequences (Additional characters may
follow these sequences.):
r Open text file for reading. The stream is positioned at the beginning of the file.
r+ Open for reading and writing. The stream is positioned at the beginning of the file.
w Truncate file to zero length or create text file for writing. The stream is positioned at the begin‐
ning of the file.
w+ Open for reading and writing. The file is created if it does not exist, otherwise it is truncated.
The stream is positioned at the beginning of the file.
a Open for appending (writing at end of file). The file is created if it does not exist. The stream is
positioned at the end of the file.
a+ Open for reading and appending (writing at end of file). The file is created if it does not exist.
The initial file position for reading is at the beginning of the file, but output is always appended to
the end of the file.
The mode string can also include the letter 'b' either as a last character or as a character between the char‐
acters in any of the two-character strings described above. This is strictly for compatibility with C89 and
has no effect; the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat
text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file
and expect that your program may be ported to non-Unix environments.)
See NOTES below for details of glibc extensions for mode.
Any created files will have mode S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666), as modified
by the process's umask value (see umask(2)).
Reads and writes may be intermixed on read/write streams in any order. Note that ANSI C requires that a file
positioning function intervene between output and input, unless an input operation encounters end-of-file.
(If this condition is not met, then a read is allowed to return the result of writes other than the most
recent.) Therefore it is good practice (and indeed sometimes necessary under Linux) to put an fseek(3) or
fgetpos(3) operation between write and read operations on such a stream. This operation may be an apparent
no-op (as in fseek(..., 0L, SEEK_CUR) called for its synchronizing side effect.
Opening a file in append mode (a as the first character of mode) causes all subsequent write operations to
this stream to occur at end-of-file, as if preceded by an
The fdopen() function associates a stream with the existing file descriptor, fd. The mode of the stream (one
of the values "r", "r+", "w", "w+", "a", "a+") must be compatible with the mode of the file descriptor. The
file position indicator of the new stream is set to that belonging to fd, and the error and end-of-file indi‐
cators are cleared. Modes "w" or "w+" do not cause truncation of the file. The file descriptor is not
dup'ed, and will be closed when the stream created by fdopen() is closed. The result of applying fdopen() to
a shared memory object is undefined.
The freopen() function opens the file whose name is the string pointed to by path and associates the stream
pointed to by stream with it. The original stream (if it exists) is closed. The mode argument is used just
as in the fopen() function. The primary use of the freopen() function is to change the file associated with a
standard text stream (stderr, stdin, or stdout).
Upon successful completion fopen(), fdopen() and freopen() return a FILE pointer. Otherwise, NULL is returned
and errno is set to indicate the error.
EINVAL The mode provided to fopen(), fdopen(), or freopen() was invalid.
The fopen(), fdopen() and freopen() functions may also fail and set errno for any of the errors specified for
the routine malloc(3).
The fopen() function may also fail and set errno for any of the errors specified for the routine open(2).
The fdopen() function may also fail and set errno for any of the errors specified for the routine fcntl(2).
The freopen() function may also fail and set errno for any of the errors specified for the routines open(2),
fclose(3) and fflush(3).
fclose - close a stream
int fclose(FILE *fp);
The fclose() function flushes the stream pointed to by fp (writing any buffered output data using fflush(3))
and closes the underlying file descriptor.
The behaviour of fclose() is undefined if the stream parameter is an illegal pointer, or is a descriptor
already passed to a previous invocation of fclose().
Upon successful completion 0 is returned. Otherwise, EOF is returned and the global variable errno is set to
indicate the error. In either case any further access (including another call to fclose()) to the stream
results in undefined behavior.
EBADF The file descriptor underlying fp is not valid.
The fclose() function may also fail and set errno for any of the errors specified for the routines close(2),
write(2) or fflush(3).
fgetc, fgets, getc, getchar, gets, ungetc - input of characters and strings
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
char *gets(char *s);
int ungetc(int c, FILE *stream);
fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end
of file or error.
getc() is equivalent to fgetc() except that it may be implemented as a macro which evaluates stream more than
getchar() is equivalent to getc(stdin).
gets() reads a line from stdin into the buffer pointed to by s until either a terminating newline or EOF,
which it replaces with '\0'. No check for buffer overrun is performed (see BUGS below).
fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to
by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A '\0'
is stored after the last character in the buffer.
ungetc() pushes c back to stream, cast to unsigned char, where it is available for subsequent read operations.
Pushed-back characters will be returned in reverse order; only one pushback is guaranteed.
Calls to the functions described here can be mixed with each other and with calls to other input functions
from the stdio library for the same input stream.
For non-locking counterparts, see unlocked_stdio(3).
fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of
file or error.
gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have
ungetc() returns c on success, or EOF on error.