日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux阶段复习题

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux阶段复习题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前天晚上考的Linux階段性復習題,考的有些個爛,被老師提出去訓了一頓,確實還是基礎不行啊,今天把這個題拿出來與大家分享一下,希望對大家有幫助,都會附有答案和講解,也說明了Linux中,基礎很重要,我比較注重實操代碼,后面的代碼題,都還是沒問題的,就是前面的理論有些個爛,加油,兄弟們!

第一階段復習考試題(問答題)每題3分

1、簡述如下目錄的功能(這些是重要的,必須掌握的,其他的目錄作為了解就好)

/boot 開機引導目錄

/etc 配置文件目錄

/lib 存放庫文件

/bin 普通用戶可執行的指令

/home 普通用戶的家目錄

/root 管理員的家目錄

2 寫出15個熟悉的linux 命令,并說明其功能

答: 文件:cp rm mv cat less more tail head vi/vim find grep touch mkdir
進程**:ps kill top jobs**
打包:tar gzip

3 linux 系統都有哪些類型的文件?每種類型用什么符號標識?

答:標識符號怎么查看呢 在Linux終端輸入ls -l 在權限rwx這些前面的那個就是標識
普通文件 -(-是普通文件的標識)
目錄文件 d
管道文件 p
鏈接文件 l
設備文件 c,b
套接字 s

4 文件有哪些基本權限,分別對用的數值是多少?

答:`

**r權限對應的數值為4
w權限對應的數值為2
x權限對應的數值為1
-(減號是無權限)對應的數值為0**

5 將一個名為file 的文件權限改成屬主具有讀寫執行,同組人具有讀寫權限,其他人沒有任何權限,寫出命令:

答:chomd 760 file
該命令就是將屬主權限改為讀寫執行
同組人改為讀寫
其他人無權限
當然也可以換種方式寫 就是比較麻煩:

chomd u = r+w+x file
chomd g = r+w file

6 將main.c 生成對應的可執行程序main, 中間一共經過幾個步驟,分別是什么?并給出對應的gcc 編譯命令。

答:四個步驟 預編譯 編譯 匯編 鏈接

gcc -E main.c -o main.i;
gcc -S main.i -o main.s;
gcc -c main.s -o main.o
gcc -o main main.o

與上面的四個步驟分別對應起來就行

7 有三個文件 main.c ,add.c max.c 部分內容如下,請給出編譯命令:

main.c如下

#include <stdio.h>
int add( int x, int y);
int max( int x, int y);
int main()
{int a = 2;int b = 3;printf("a+b=%d\n",add(a+b));printf("max=%d\n",max(a,b));
}

add.c 如下:

int add(int x, int y)
{return x + y;
}

max.c 如下:

int max( int x, int y)
{return x > y? x : y;
}

答:一步完成編譯的命令為:

gcc -o main main.c add.c max.c

8 請寫出makefile完成對第7題的自動編譯。

答:這塊就是寫出mkfile的方法

all:mainmain:main.o add.o max.ogcc -o main main.o add.o max.omain.o:main.cgcc -c main.cadd.o:add.cgcc -c add.cmax.o:max.cgcc -c max.cclean:rm -rf*.o main  //銷毀.o文件的的

9 調試使用什么工具?常用的調試命令有哪些?

答:gdb命令調試命令
顯示代碼l
單步執行n
設置斷點b
程序執行r
進入函數s
開始調試的命令:

gcc -o main main.c add.c max.c -g
gdb main

10 什么是庫?請簡述共享庫和靜態庫的區別.

答:庫是預先編譯好的函數(方法)的集合;
靜態庫:在程序編譯時會被鏈接到目標代碼中,程序運行時將不再需要該靜態庫。
動態庫:在程序編譯時并不會被鏈接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態庫存在

11 如第7題代碼,請將add.c 和max.c 中的方法生成到靜態庫libfoo.a中,寫出生成庫的命令:

答: 這個將add.c和max.c的方法生成到靜態庫中,首先得將add.c和max.c匯編成add.o和max.o

gcc -c add.c
gcc -c max.c
//然后對這兩.o文件整合到靜態庫中
ar crv libfoo.a add.o max.o   //這行命令就是整合add.o和max.o的

12 如第7題代碼,請將add.c 和max.c 中的方法生成到共享庫libfoo.so中,寫出生成庫的命令

答:同樣的,先將add.c和max.o匯編為.o文件 然后進行整合

gcc -c add.c
gcc -c max.c
//然后對這兩.o文件整合到共享庫中
gcc -shared fPIC -o libfoo.so add.o max.o  //共享庫生成命令

13 查看可執行程序用到哪些共享庫使用那個命令?

答:ldd main //這塊就是ldd加可執行程序進行查看使用了共享庫的命令

14 什么是進程?進程有那些基本狀態?

答:程序執行起來叫進程
基本狀態:就緒 執行 阻塞

15 程序與進程有什么區別?

答:程序執行起來叫進程 進程是程序執行的過程

16 linux系統中主函數有哪些參數,,寫出主函數的完整形式,并說明各個形參的意義分別是什么?

答 :

int main(int argc,char* argv[],char* envp[])  //分別對應參數個數,參數內容,環境變量

17 庫函數和系統調用有什么區別?

答:系統調用是直接調用內核效率高 庫函數則是到指定或默認的目錄下去找尋該函數的定義效率低于系統調用

18 ipc機制有哪些?

答:管道通信 共享內存 信號量 消息隊列

19 有名管道和無名管道的區別?

答:有名管道就是任意兩進程間都可以用來通信 無名管道只能在fork()之后的父子進程之間通信

20 什么是僵死進程?如何處理僵死進程

答:僵死進程就是子進程先于父進程結束了 但是父進程沒有獲取子進程的退出碼(狀態信息)
處理僵死過程的辦法是使用wait

21 如下代碼一共產生多少個進程?

int main()
{fork()||fork();
}

答:3個進程 具體去看我的這篇博客:
fork()||fork()||fork()
里面詳細解釋了這個題 以及它的拓展題

22 如下程序分別輸出多少個’a’?

int main()
{for( int i = 0; i < 2; i++){fork();printf("a\n");}
}

答:6
具體解釋去看我的這篇博客:
fork后有無\n的打印

23 如下程序分別輸出多少個’a’?

int main()
{for( int i = 0; i < 2; i++){fork();printf("a");}
}

答:8
具體解釋去看我的這篇博客:
fork之后有無\n的打印

24 什么是臨界資源,什么是臨界區?

答**:臨界資源就是只允許一個進程訪問的資源 臨界區就是訪問臨界資源的那段代碼**

25 請說明信號量的pv操作分別代表什么意思?那個操作可能阻塞為什么?

答:pv操作就是對信號量的減一和加一的操作! 當信號值由p操作減一之后變為零,臨界資源就不可訪問 就阻塞住了!然后v操作就是將信號量加一,使得臨界資源變得再次可訪問!

第一階段復習考試題(編程題)

26 寫程序,父進程復制產生子進程,在父子進程中循環打印7次字符串“parent",

在子進程中循環打印3次字符串"child",補全代碼:(8分)

答案:

int main()
{char* s = NULL;int n = 0;pid_t pid = fork();if(pid == 0){for(int i = 0 ; i < 3 ; i++){printf("child");}}else{for(int i = 0 ; i < 7 ; i++){printf("parent");}}
}

27 寫程序使用open,read,write,close等系統調用,對文件a.txt進行復制生成b.txt (8分)

int main()
{int fdr = open("a.txt",O_RDONLY);int fdw = open("b.txt",O_WRONLY|O_CREAT,0600);//這是兩行提示代碼  源碼在我這篇博客中寫的很明白  代碼注釋以及講解都有if(fdr == -1 || fdw == -1) //創建和打開失敗 返回值為-1{exit(0);//直接終止掉程序}char buff[1024] = {0};int num = 0;while((num = read(fdr,buff,50)) > 0) //文件標識符往buff中去讀取  每次50個字節//ssize_t read(int fd, void *buf, size_t count);//這塊fdr是文件描述符  {write(fdw,buff,num); //每次寫入num個字節}close(fdr);close(fdw);
}

源碼(附有講解及原理圖)博客鏈接:
https://blog.csdn.net/qq_45829112/article/details/120921294

28 寫程序改變SIGINT信號的響應方式,使得程序在第一次收到信號時,打印信號的代號值,第二次收到信號時按默認方式結束程序。修改補全代碼:(9分)

代碼已經補全 下方有原理圖

void sig_fun(int sig)
{printf("sig=%d\n",sig);signal(sig,SIG_DFL);
}
int main()
{signal(SIGINT,sig_fun);   //SIGINT就是程序終止程序 也就是Ctrl+Cwhile(1){printf("hello\n");sleep(1);}return 0;
}

對于這道題 我們首先得知道這個原理圖:

兄弟們 Linux的基礎還是很重要的,不要過于注重什么高大上的代碼知識,先給地基搭好,以后樓會蓋的很高,未來的路也會更寬!

“想到了就去做,不要拖,不要等”

總結

以上是生活随笔為你收集整理的Linux阶段复习题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。