UNIX再学习 -- 再识
到了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用户登录
参看:Hi3516A开发--使用root模式登录Ubuntu14.04
五、登录名设置
UNIX再学习 -- 再识相关推荐
- C语言再学习 -- 再论内存管理
之前有总结过内存管理,参看:C语言再学习 -- 内存管理 但现在看来,缺少示例.从新再写一篇文章,着重介绍常见内存错误.跨函数使用存储区.开始吧,再论内存管理!! 发生内存错误是件非常麻烦的事情.编译 ...
- C语言再学习 -- 再论数组和指针
之前有总结指针数组,但是现在看来总结的太简单了.好多重要的知识点都是一带而过的.本想在后面添加后来想想算了,还是再写一篇文章来详细介绍数组和指针这对冤家吧. 之前总结的,参看:C语言再学习 -- 数组 ...
- UNIX再学习 -- shell编程
UNIX环境高级编程看了三章,遇到不少重定向等shell命令.本想到Linux时再讲,看来有必要提前了.之前有看过一本<嵌入式Linux软硬件开发详解>这本书里有简单介绍了一部分shell ...
- UNIX再学习 -- 内存管理
C 语言部分,就一再的讲内存管理,参看:C语言再学习 -- 再论内存管理 UNIX.Linux 部分还是要讲,足见其重要. 一.存储空间布局 1.我们先了解一个命令 size,继而引出我们今天要讲的 ...
- C语言再学习 -- 详解C++/C 面试题 1
参看:<高质量C++ C编程指南>.林锐 对这篇文章记忆犹新,因为之前找工作面试的时候,遇到过一家公司就是用的这套面试题.现在就结合考查的知识点和我总结完 C 语言再学习后的深入理解,来详 ...
- C语言再学习 -- 详解C++/C 面试题 2
(经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...
- UNIX再学习 -- 网络IPC:套接字
一.基本概念 1.编程接口 什么是伯克利套接字(Berkeley Socket)? 美国加利福尼亚大学比克利分校于 1983年发布 4.2 BSD Unix 系统.其中包含一套用 C 语言编写的应用程 ...
- UNIX再学习 -- 进程间通信之管道
一.进程间通信概念 首先,需要了解一下什么是进程间通信. 进程之间的相互通信的技术,称为进程间通信(InterProcess Communication,IPC). 下图列出 4 种实现所支持的不同形 ...
- UNIX再学习 -- 记录锁
APUE第 3 章,参看:UNIX再学习 -- 文件I/O fcntl 函数它的记录锁功能我们当时没讲.接下来就详细说明下. 一.读写冲突 1.如果两个或两个以上的进程同时向一个文件的某个特定的区域 ...
最新文章
- java new string 图_Java中String直接赋字符串和new String的一些问题
- 英国最新报告:40% AI公司其实没用任何AI技术
- 智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题
- sklearn 安装_sklearn-classification_report
- Fiddler 抓包详细使用教程
- spring学习(13):使用junit4进行单元测试续
- #define的高级用法
- 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
- JS 进阶知识点及常考面试题
- (转)蜜果私塾:http协议学习和总结系列--深入了解篇
- 经典测试用例--水杯测试
- Ubuntu18.04 显卡驱动完美安装(解决安装后无法进入桌面)
- panabit环境搭建
- jzoj 1388. 【2012.02.25普及组】探索的奶牛
- 《沈剑架构师训练营》第7章 - 架构解耦
- 网络攻防之信息收集和社工技巧
- java怎么写桌面日历_Win7桌面怎么添加日历记事本
- winedt103系统找不到指定文件_win10专业版提示系统找不到指定文件的解决教程
- 在多个指定区间内生成随机数,且随机数总和固定算法
- Bias - Variance Decomposition