UNIX再学习 -- 再识

来源:互联网 发布:java iterator next 编辑:程序博客网 时间:2024/06/01 14:37

到了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 -lbsdcollect2: ld 返回 1make[1]: *** [badexit2] 错误 1make[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
0 0
原创粉丝点击