學習 Linux高階程式設計03

2021-06-14 18:05:29 字數 4395 閱讀 2623

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 二 預...