Linux - Unix环境高级编程(第三版) 源代码编译(即头文件apue.h如何使用问题)【转】

本文转载自:http://blog.csdn.net/hadas_wang/article/details/43203795

1. 下载代码:http://www.apuebook.com/code3e.html

2. 安装依赖库:sudo apt-get install libbsd-dev 

3. 进入下载目录make

4. 复制头文件和动态链接库

  1. sudo cp ./include/apue.h /usr/include/
  2. sudo cp ./lib/libapue.a /usr/local/lib/
  3. sudo cp ./lib/libapue.a /usr/lib/

5. 设置错误文件error.h

  1. #include "apue.h"
  2. #include <errno.h>      /* for definition of errno */
  3. #include <stdarg.h>     /* ISO C variable aruments */
  4. static void err_doit(int, int, const char *, va_list);
  5. /*
  6. * Nonfatal error related to a system call.
  7. * Print a message and return.
  8. */
  9. void err_ret(const char *fmt, ...)
  10. {
  11. va_list     ap;
  12. va_start(ap, fmt);
  13. err_doit(1, errno, fmt, ap);
  14. va_end(ap);
  15. }
  16. /*
  17. * Fatal error related to a system call.
  18. * Print a message and terminate.
  19. */
  20. void err_sys(const char *fmt, ...)
  21. {
  22. va_list     ap;
  23. va_start(ap, fmt);
  24. err_doit(1, errno, fmt, ap);
  25. va_end(ap);
  26. exit(1);
  27. }
  28. /*
  29. * Fatal error unrelated to a system call.
  30. * Error code passed as explict parameter.
  31. * Print a message and terminate.
  32. */
  33. void err_exit(int error, const char *fmt, ...)
  34. {
  35. va_list     ap;
  36. va_start(ap, fmt);
  37. err_doit(1, error, fmt, ap);
  38. va_end(ap);
  39. exit(1);
  40. }
  41. /*
  42. * Fatal error related to a system call.
  43. * Print a message, dump core, and terminate.
  44. */
  45. void err_dump(const char *fmt, ...)
  46. {
  47. va_list     ap;
  48. va_start(ap, fmt);
  49. err_doit(1, errno, fmt, ap);
  50. va_end(ap);
  51. abort();        /* dump core and terminate */
  52. exit(1);        /* shouldn't get here */
  53. }
  54. /*
  55. * Nonfatal error unrelated to a system call.
  56. * Print a message and return.
  57. */
  58. void err_msg(const char *fmt, ...)
  59. {
  60. va_list     ap;
  61. va_start(ap, fmt);
  62. err_doit(0, 0, fmt, ap);
  63. va_end(ap);
  64. }
  65. /*
  66. * Fatal error unrelated to a system call.
  67. * Print a message and terminate.
  68. */
  69. void err_quit(const char *fmt, ...)
  70. {
  71. va_list     ap;
  72. va_start(ap, fmt);
  73. err_doit(0, 0, fmt, ap);
  74. va_end(ap);
  75. exit(1);
  76. }
  77. /*
  78. * Print a message and return to caller.
  79. * Caller specifies "errnoflag".
  80. */
  81. static void err_doit(int errnoflag, int error, const char *fmt, va_list ap)
  82. {
  83. char    buf[MAXLINE];
  84. vsnprintf(buf, MAXLINE, fmt, ap);
  85. if (errnoflag)
  86. snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",
  87. strerror(error));
  88. strcat(buf, "\n");
  89. fflush(stdout);     /* in case stdout and stderr are the same */
  90. fputs(buf, stderr);
  91. fflush(NULL);       /* flushes all stdio output streams */
  92. }

6. 注销,重启

7. 代码文件

    1. #include "apue.h"
    2. #include "error.h"
上一篇:Java 学习之反射机制“解刨”分解类,并获取内容!


下一篇:Android(java)学习笔记260:JNI之native方法头文件的生成