am
一、make與makefile
1.回顧:
目標的語法
目標名:依賴目標
@命令@命令
make的命令列使用
make-f make 指令碼檔案目標名
2.目標的劃分
目標依賴
3.預設規則:
a.不指定目標,預設執行第乙個目標
b.不指定make檔案,預設檔案是makefile或者是makefile(makefile優先)
4.目標的呼叫規則:(make把目標當作檔案)
make執行目標:
搜尋與目標相同的檔案
如果檔案存在,則判定日期。
日期最新,則停止執行,輸出提示
日期不是最新,則進行執行
比較:當前目標與依賴目標
如果當前目標有
5.建議:
只要有檔案輸入出,就把任務作為乙個目標,並且把輸出的檔案作為目標名。==
每乙個編譯結果作為乙個目標,並且把編譯結果作為目標名。
6.潛規則(不建議)
.c目標與.o目標
首先查詢.o目標,目標如果不存在,就把.o替換成.c
如果.c存在,實施潛規則:直接呼叫gcc把.c執行為.o
7.變數
變數名=值值
$(變數名) $ 變數名可以是使用者定義的也可以是環境變數
8.偽目標
不把目標作為檔案處理的目標稱為偽目標
宣告偽目標:.phony:clean
沒有:1.make的配置
2.make的變數的操作函式
3.多make檔案使用
二、環境變數
訪問環境變數的方式:
1.使用main的引數
intmain(int args, char **argv, char **arge)
二維陣列迴圈
命令列引數argv與環境行arge都是字元陣列。
約定:最後乙個字串實際上是null/0
2.在c的標準庫提供:外部變數
externchar **environ;
3.修改獲取某個環境變數
getenv/setenv/unsetenv
三、io的基礎
1.認識核心物件
不允許訪問核心裝置和記憶體,
但可以通過核心系統函式去訪問。
對每個核心物件進行編號id。
如果訪問核心物件,只能通過id。
程式設計模型:
申請得到乙個id
在核心系統函式中使用id得到對應核心物件資料
2.怎麼訪問檔案
使用函式,傳遞乙個檔案,系統開啟檔案,載入檔案資料,返回乙個id,
使用函式,傳遞乙個id,得到資料
使用函式傳遞id,告訴系統釋放檔案。
id:檔案描述符號。filedescription(fd)
每乙個程式執行的時候都有乙個目錄,存放開啟的檔案描述符
3.每個程式預設開啟三個檔案裝置(cd /proc/25967/fd/) fd
0:標準輸入
1:標準輸出
2:錯誤輸出
4.操作檔案描述符
ssize_twrite(int fd,
void*buf, //要寫入核心物件的資料
size_tsize,) //寫入資料的大小
返回值:
>0實際寫入的資料
=-1寫入錯誤
ssize_tread(int fd,
void*buf, //返回資料的空間
size_tsize); //空間大小
返回值:
>0:實際讀取的資料
=0:碰到檔案結束符號eof(ctrl+d)
=-1:讀取錯誤
建議:0:輸入
1:輸出
2:錯誤輸出
課堂練習:
1.使用write向0 1 2寫資料
2.使用read從0 1 讀取資料,並判定輸入的情況,然後根據相應的結果輸出提示 pm
三、基於檔案的描述符號
1.得到檔案描述符號/釋放檔案描述符
a.檔案型別
目錄檔案d
普通檔案f
字元裝置檔案c
塊裝置檔案b
軟連線檔案l(符號連線檔案)
管道檔案p
socket檔案s
b.檔案的屬性
1.字元表達方式:字元模式:chmodu+w aa.c 絕對方式chmod 777 aa.c
0 0 0 0
擁有者組其他使用者
2.檔案的許可權屬性:讀寫
執行佔附位許可權
使用者設定許可權
組設定許可權
0 0 0 0 0
特殊許可權擁有者組其他使用者s:
s: t:
t: 2.1s設定位
2:組設定位
4:使用者設定位
s對執行檔案
無效的設定位使用s表示
設定位向其他使用者開放擁有者許可權的許可權,使用者設定位
設定位向其他使用者開放組使用者許可權的許可權,組使用者設定位
設定位只對執行程式有意義(執行許可權有意義)
2.2t設定位
1:表示沾附位設定
t對寫檔案有意義
無效的沾附位使用t表示
沾附的目的:防止有許可權的使用者刪除檔案
程式在執行的時候到底擁有的是執行者的許可權,還是檔案擁有者的許可權。
程式執行過程中有兩個使用者:
實際使用者:
c.
2.通過檔案描述符號讀寫資料
3.檔案的概念與重定向
demo.mk
compile:
gcc -c -fpic input.c
gcc -c -fpic primer.c
lnk: compile
gcc -shared -olibdemo.so input.o primer.o
demo:lnk
gcc demo.c -ldemo -l -omain
make –f demo.mk demo
makefile檔案中的變數
makefile
input.o: input.c
gcc -c -fpic input.c
primer.o: primer.c
gcc -c -fpic primer.c
libdemo.so: input.o primer.o
gcc -shared -olibdemo.so input.o primer.o
demo:demo.c libdemo.so
gcc demo.c -ldemo -l -omain
makefile
obj=input.o primer.o
input.o: input.c
gcc -c -fpic input.c
primer.o: primer.c
gcc -c -fpic primer.c
libdemo.so: $(obj)
gcc -shared -olibdemo.so $(obj)
demo:demo.c libdemo.so
gcc demo.c -ldemo -l -omain
env.c
#include
int main(int args, char **argv, char **arge) }
env: env.c
gcc env.c -omain
clean:
rm -f main *.o
env2.c
#include
int main(int args, char *argv, char *arge) }
env3.c
#include
#include
extern char **environ;
int main() }
fd.c
#include
#include
main()
執行結果
write1.c
#include
#include
main()
read1.c
#include
#include
main()
if(r == 0)
if(r == -1)
}
chmod
main
a.txt 趙
rwx rw
張 xr
問題:當張執行main時能否對a.txt寫?
答案:不允許
Shell指令碼 程式設計高階03
1 每隔 3 秒鐘到系統上獲取已經登入的使用者的資訊 如果發現使用者 hacker 登入,則將登入時間和主機記錄於日誌 var log login.log 中,並退出指令碼 bin bash while do echo date f t no information if who grep hack...
Linux03高階命令
1 df命令 作用 檢視磁碟空間 語法 df h h作用為表示可讀性較高的形式展示大小 2 free指令 作用 檢視記憶體使用情況 語法 free m m的意思是以m為單位顯示,類似的還有 b k g 3 head指令 作用 檢視檔案前部分內容 用法 head n 路徑 n代表行數,檢視檔案的前幾行...
C 高階程式設計03 細節內容
一 命名空間 1.c 使用using關鍵字可以列出所需類的名稱控制項。它和c c 中的 include不一樣。using語句並沒有在這些檔案之間建立物理連線 2.使用using給命名空間指定別名 using alias namspacename 使用 alias namespaceclass 二 預...