GRASS Programmer's Manual
6.5.svn(2014)-r66266
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
grocat.c
Go to the documentation of this file.
1
2
/****************************************************************************
3
*
4
* MODULE: grocat
5
* AUTHOR(S): Paul Kelly
6
* PURPOSE: Copies stdin to stdout in line-buffered mode until end
7
* of file is received.
8
* Used with Tcl/Tk gronsole system to merge stdout and
9
* stderr streams to be caught by Tcl "open" command.
10
* COPYRIGHT: (C) 2006 by the GRASS Development Team
11
*
12
* This program is free software under the GNU General Public
13
* License (>=v2). Read the file COPYING that comes with GRASS
14
* for details.
15
*
16
*****************************************************************************/
17
18
#include <stdio.h>
19
#include <stdlib.h>
20
21
int
main
(
void
)
22
{
23
int
inchar, outchar;
24
char
inbuff[1024], outbuff[1024];
25
26
/* stdin and stdout both line-buffered */
27
if
(setvbuf(stdin, inbuff, _IOLBF,
sizeof
(inbuff))) {
28
fprintf(stderr,
"grocat: Can't set stdin to line-buffered mode!\n"
);
29
exit(EXIT_FAILURE);
30
}
31
if
(setvbuf(stdout, outbuff, _IOLBF,
sizeof
(outbuff))) {
32
fprintf(stderr,
"grocat: Can't set stdout to line-buffered mode!\n"
);
33
exit(EXIT_FAILURE);
34
}
35
36
while
((inchar = getc(stdin)) != EOF) {
37
/* Read a character at a time from stdin until EOF
38
* and copy to stdout */
39
outchar = putc(inchar, stdout);
40
if
(outchar != inchar) {
41
fprintf(stderr,
"grocat: Error writing to stdout!\n"
);
42
exit(EXIT_FAILURE);
43
}
44
}
45
46
/* Flush in case last line wasn't terminated properly or something */
47
fflush(stdout);
48
49
exit(EXIT_SUCCESS);
50
}
main
int main(int argc, char *argv[])
Definition:
gem/main.c:302
lib
gtcltk
grocat.c
Generated on Sat Jan 2 2016 01:46:48 for GRASS Programmer's Manual by
1.8.5