UNIX再学习 -- 再识
到了Unix編程,因為之前有C語言的基礎(chǔ)吧,看了下目錄大部分內(nèi)容之前都有所總結(jié),進(jìn)度應(yīng)該能夠加快。不過最近有點小郁悶,申請博客專家轉(zhuǎn)正失敗了,這也讓我重新審視了自己更新博客的初心是什么。絕不是為了與自己水平不符的專家稱號,而是為提升自己。我可以問心無愧的說每天都在進(jìn)步,這已經(jīng)是對于自己的肯定了。發(fā)完牢騷了,現(xiàn)在就開始Unix新篇!
一、再識
參看的是Unix 環(huán)境高級編程(第3版),在前言中講到本書這一版中涉及的平臺中有Ubuntu12.04,正好我就在用這一版本的虛擬機。然后書中示例的源碼可以從?http://apuebook.com/src.3e.tar.gz?獲得,建議準(zhǔn)備一本《Unix程序員手冊》作為參考手冊。我整理了下如果有需要可下載:UNIX環(huán)境高級編程
二、編譯
將下載后的源碼拷貝到虛擬機解壓,進(jìn)入apue.3e目錄編譯。
tar -xvf src.3e.tar.gz?
cd apue.3e
make
出現(xiàn)錯誤:
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 原因是系統(tǒng)缺乏對應(yīng)的庫文件,詳細(xì)可?參看:關(guān)于usr/bin/ld: cannot find -lxxx問題總結(jié)
解決方法:apt-get install libbsd-dev
三、使用
編譯完成,但是我們的目的不只是為看源碼,而是自己編寫。
將頭文件拷貝到系統(tǒng) include 目錄下。
cp /apue.3e/include/apue.h /usr/include/
拷貝?error.c 到系統(tǒng) 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 呢?
舉個例子,調(diào)用?/apue.3e/exercises/openmax.c 里的函數(shù) open_max 編譯時會出錯:
/tmp/ccb3T0PH.o: In function `open_max': openmax1.c:(.text+0x43): undefined reference to `err_sys' collect2: ld 返回 1 查看可發(fā)現(xiàn) err_sys 等一系列函數(shù)是在 error.c 下定義的,所以需要添加 error.c 到頭文件。四、root用戶登錄
一般Ubuntu默認(rèn)的是普通用戶進(jìn)入,root超級用戶被禁用。如果執(zhí)行權(quán)限操作,需要加 sudo 。所以還是建議使用root模式登錄,之前已經(jīng)有總結(jié),我主要使用的Ubuntu12.04和14.04兩個版本,其他版本自行嘗試。 參看:C語言再學(xué)習(xí) -- Ubuntu 12.04 root用戶登錄設(shè)置參看:Hi3516A開發(fā)--使用root模式登錄Ubuntu14.04
五、登錄名設(shè)置
在/etc/passwd文件下,通常是可以改變用戶起始目錄,之前也講過。 參看:Hi3516A開發(fā)--/etc/passwd總結(jié)
以上是生活随笔為你收集整理的UNIX再学习 -- 再识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word2Vec学习笔记(四)——Neg
- 下一篇: java面试题总结(二)----java