到了Unix编程,因为之前有C语言的基础吧,看了下目录大部分内容之前都有所总结,进度应该能够加快。不过最近有点小郁闷,申请博客专家转正失败了,这也让我重新审视了自己更新博客的初心是什么。绝不是为了与自己水平不符的专家称号,而是为提升自己。我可以问心无愧的说每天都在进步,这已经是对于自己的肯定了。发完牢骚了,现在就开始Unix新篇!

一、再识

参看的是Unix 环境高级编程(第3版),在前言中讲到本书这一版中涉及的平台中Ubuntu12.04,正好我就在用这一版本的虚拟机。然后书中示例的源码可以从 http://apuebook.com/src.3e.tar.gz 获得,建议准备一本《Unix程序员手册》作为参考手册。我整理了下如果有需要可下载:UNIX环境高级编程

二、编译

将下载后的源码拷贝到虚拟机解压,进入apue.3e目录编译

tar -xvf src.3e.tar.gz 

cd apue.3e

make

出现错误:

gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  badexit2.c -o badexit2  -L../lib -lapue -pthread -lrt -lbsd
/usr/bin/ld: cannot find -lbsd
collect2: ld 返回 1
make[1]: *** [badexit2] 错误 1
make[1]:正在离开目录 `/home/tarena/project/apue.3e/threads'
make: *** [all] 错误 1

原因是系统缺乏对应的库文件,详细可 参看:关于usr/bin/ld: cannot find -lxxx问题总结
解决方法:apt-get install libbsd-dev

三、使用

编译完成,但是我们的目的不只是为看源码,而是自己编写。

将头文件拷贝到系统 include 目录下

cp /apue.3e/include/apue.h /usr/include/

拷贝 error.c 到系统 include 目录下

cp /apue.3e/lib/error.c /usr/include/

注意,这里的文件是 error.c,不是 error.h,/usr/include /目录下有一个 error.h 的头文件。

编辑 /usr/include/apue.h 文件

在文件最后 #endif 前加上包含 error.c 的代码:

#include "error.c"

然后将编写程序包含头文件。

#inlcude <apue.h>

说明:包含头文件apue.h好理解,为什么要在头文件上添加 error.c 呢?

举个例子,调用 /apue.3e/exercises/openmax.c 里的函数 open_max 编译时会出错:

/tmp/ccb3T0PH.o: In function `open_max':
openmax1.c:(.text+0x43): undefined reference to `err_sys'
collect2: ld 返回 1

查看可发现 err_sys 等一系列函数是在 error.c 下定义的,所以需要添加 error.c 到头文件。

四、root用户登录

一般Ubuntu默认的是普通用户进入,root超级用户被禁用。如果执行权限操作,需要加 sudo 。所以还是建议使用root模式登录,之前已经有总结,我主要使用的Ubuntu12.04和14.04两个版本,其他版本自行尝试。
参看:C语言再学习 -- Ubuntu 12.04 root用户登录设置

参看:Hi3516A开发--使用root模式登录Ubuntu14.04

五、登录名设置

在/etc/passwd文件下,通常是可以改变用户起始目录,之前也讲过。
参看:Hi3516A开发--/etc/passwd

UNIX再学习 -- 再识相关推荐

  1. C语言再学习 -- 再论内存管理

    之前有总结过内存管理,参看:C语言再学习 -- 内存管理 但现在看来,缺少示例.从新再写一篇文章,着重介绍常见内存错误.跨函数使用存储区.开始吧,再论内存管理!! 发生内存错误是件非常麻烦的事情.编译 ...

  2. C语言再学习 -- 再论数组和指针

    之前有总结指针数组,但是现在看来总结的太简单了.好多重要的知识点都是一带而过的.本想在后面添加后来想想算了,还是再写一篇文章来详细介绍数组和指针这对冤家吧. 之前总结的,参看:C语言再学习 -- 数组 ...

  3. UNIX再学习 -- shell编程

    UNIX环境高级编程看了三章,遇到不少重定向等shell命令.本想到Linux时再讲,看来有必要提前了.之前有看过一本<嵌入式Linux软硬件开发详解>这本书里有简单介绍了一部分shell ...

  4. UNIX再学习 -- 内存管理

    C 语言部分,就一再的讲内存管理,参看:C语言再学习 -- 再论内存管理  UNIX.Linux 部分还是要讲,足见其重要. 一.存储空间布局 1.我们先了解一个命令 size,继而引出我们今天要讲的 ...

  5. C语言再学习 -- 详解C++/C 面试题 1

    参看:<高质量C++ C编程指南>.林锐 对这篇文章记忆犹新,因为之前找工作面试的时候,遇到过一家公司就是用的这套面试题.现在就结合考查的知识点和我总结完 C 语言再学习后的深入理解,来详 ...

  6. C语言再学习 -- 详解C++/C 面试题 2

    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...

  7. UNIX再学习 -- 网络IPC:套接字

    一.基本概念 1.编程接口 什么是伯克利套接字(Berkeley Socket)? 美国加利福尼亚大学比克利分校于 1983年发布 4.2 BSD Unix 系统.其中包含一套用 C 语言编写的应用程 ...

  8. UNIX再学习 -- 进程间通信之管道

    一.进程间通信概念 首先,需要了解一下什么是进程间通信. 进程之间的相互通信的技术,称为进程间通信(InterProcess Communication,IPC). 下图列出 4 种实现所支持的不同形 ...

  9. UNIX再学习 -- 记录锁

    APUE第 3 章,参看:UNIX再学习 -- 文件I/O  fcntl 函数它的记录锁功能我们当时没讲.接下来就详细说明下. 一.读写冲突 1.如果两个或两个以上的进程同时向一个文件的某个特定的区域 ...

最新文章

  1. java new string 图_Java中String直接赋字符串和new String的一些问题
  2. 英国最新报告:40% AI公司其实没用任何AI技术
  3. 智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题
  4. sklearn 安装_sklearn-classification_report
  5. Fiddler 抓包详细使用教程
  6. spring学习(13):使用junit4进行单元测试续
  7. #define的高级用法
  8. 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
  9. JS 进阶知识点及常考面试题
  10. (转)蜜果私塾:http协议学习和总结系列--深入了解篇
  11. 经典测试用例--水杯测试
  12. Ubuntu18.04 显卡驱动完美安装(解决安装后无法进入桌面)
  13. panabit环境搭建
  14. jzoj 1388. 【2012.02.25普及组】探索的奶牛
  15. 《沈剑架构师训练营》第7章 - 架构解耦
  16. 网络攻防之信息收集和社工技巧
  17. java怎么写桌面日历_Win7桌面怎么添加日历记事本
  18. winedt103系统找不到指定文件_win10专业版提示系统找不到指定文件的解决教程
  19. 在多个指定区间内生成随机数,且随机数总和固定算法
  20. Bias - Variance Decomposition

热门文章

  1. cs224n第二讲词向量表示:word2vec
  2. YII2 整合百度UEditor上传图片到阿里云OSS
  3. 移动设备真机调试本地程序的Node.js【无需连wifi】
  4. java继承覆盖总结
  5. Android文件系统的结构
  6. [EF4] CompiledQuery预编译性能提升 + 数据载入之大彻大悟
  7. Softmax 函数及其作用(含推导)
  8. 智能系统课件@丛爽老师-中国科学技术大学自动化系
  9. [云炬创业基础笔记]第五章创业计划评估17
  10. [案例分享]科大云炬工作室开发的安卓APP项目