码迷,mamicode.com
首页 > 其他好文 > 详细

APUE_1.4CopyStandardInputToStandardOutput

时间:2015-02-10 20:15:52      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

 1 // CopyStandardInputToStandardOutput.cpp
 2 #include "../apuesunyj.h"
 3 
 4 #define BUFFSIZE 4096
 5 
 6 int main(void)
 7 {
 8     int n;
 9     char buf[BUFFSIZE];
10 
11     while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
12     {
13         if (write(STDOUT_FILENO, buf, n) != n)
14         {
15             err_sys("write error");
16         }
17     }
18     if (n < 0)
19     {
20         err_sys("read error");
21     }
22     exit(0);
23 }
 1 // apuesunyj.h
 2 #ifndef APUE_SUNYJ
 3 #define APUE_SUNYJ
 4 
 5 #include <errno.h>
 6 #include <stdio.h>
 7 #include <string.h>
 8 #include <stdarg.h>
 9 #include <stdlib.h>
10 #include <stdint.h>
11 #include <unistd.h>
12 
13 void err_quit(const char *fmt, ...);
14 void err_sys(const char *fmt, ...);
15 
16 
17 #endif
 1 // error.cpp
 2 #include "apuesunyj.h"
 3 
 4 int64_t const MAXLINE = 4096; // max line length
 5 /*
 6  *  * Print a message and return to caller.
 7  *   * Caller specifies "errnoflag".
 8  *    */
 9 static void err_doit(int errnoflag, int error, const char *fmt, va_list ap)
10 {
11     char buf[MAXLINE];
12 
13     vsnprintf(buf, MAXLINE, fmt, ap);
14     if (errnoflag)
15         snprintf(buf + strlen(buf), MAXLINE - strlen(buf), ": %s", strerror(
16                     error));
17     strcat(buf, "\n");
18     fflush(stdout);/* in case stdout and stderr are the same */
19     fputs(buf, stderr);
20     fflush(NULL);/* flushes all stdio output streams */
21 }
22 
23 /*
24  *  * Fatal error unrelated to a system call.
25  *   * Print a message and terminate.
26  *    */
27 void err_quit(const char *fmt, ...)
28 {
29     va_list ap;
30 
31     va_start(ap, fmt);
32     err_doit(0, 0, fmt, ap);
33     va_end(ap);
34     exit(1) ; // process terminate, not just like return, totally different
35 }
36 
37 /*
38  *  * Fatal error related to a system call.
39  *   * Print a message and terminate.
40  *    */
41 void err_sys(const char *fmt, ...)
42 {
43     va_list ap;
44 
45     va_start(ap, fmt);
46     err_doit(1, errno, fmt, ap);
47     va_end(ap);
48     exit(1) ;
49 }

技术分享

APUE_1.4CopyStandardInputToStandardOutput

标签:

原文地址:http://www.cnblogs.com/sunyongjie1984/p/4284773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!