Linux系統實驗

前言:怎麼感受Linux運維和Linux系統實驗沒什麼關係?該不會的仍是不會(@@)。記錄一下幾個實驗吧。html

本篇目錄:linux

實驗一 編程環境編程

實驗二 文件讀寫bash

實驗三 進程通訊運維


實驗一 編程環境√

實驗步驟1:在Linux操做系統中編寫一個程序,實如今bash中的輸出「Hello World」。編輯器

(1) 在命令終端中輸入touch test.sh命令,以建立一個bash腳本函數

(2) 在編輯器中打開test.sh,並輸入如下代碼並保存工具

 

(3) 接着在終端輸入 ./test.sh 以運行bash腳本測試

 

 

實驗步驟2:編寫一個程序輸入一組數據,輸出該數據的平均值。(要有頭文件,有AVE函數的聲明)spa

(1) 創建AVE.cAVE.h頭文件以及main.c文件

AVE.c

AVE.h

main.c

 

 

(2) 在終端中輸入gcc -o hello main.c AVE.c進行編譯,在當前目錄生成hello可執行文件,運行./hello來查看運行結果。

 

實驗步驟3:將步驟2中求平均值得函數AVE打包生成一個動態庫和靜態庫,並在main.c中調用。

相關知識資料:

http://www.javashuo.com/article/p-nhskwnkt-bv.html

http://www.javashuo.com/article/p-brmiuieh-ch.html

https://www.jianshu.com/p/dbe848e4ad0d

(1) 分別創建目標文件SAVE.c,SAVE.h(靜態庫)DAVE.c,DAVE.h(動態庫)且內容與AVE.cAVE.h相同。

SAVE.cSAVE.h

 

DAVE.cDAVE.h

 

 

(2) 建立靜態庫.a及在main.c中調用

1.先將SAVE.c編譯生成.o文件

gcc -c -o SAVE.o SAVE.c

 

2.經過ar工具將目標文件打包成靜態庫文件.a

ar -rc libSAVE.a SAVE.o

 

3.編譯main.c時加入libSAVE.a

gcc SAVE.h main.c -static -L. -lSAVE -o main_static

 

 

4.執行main_static

 

 

(3) 建立動態庫.so及在main.c中調用

1.將DAVE.c生成動態連接庫

gcc -fPIC -shared DAVE.c -o libDAVE.so

 

2.編譯main.c時加入libDAVE.so

gcc DAVE.h main.c -L. -lDAVE -o main_shared

 

3.將文件 libhelloworld.so複製到目錄/usr/lib

sudo cp libDAVE.so  /usr/lib

 

4.運行./main_shared

 

實驗步驟4:編寫上述兩個程序的makefile文件,經過make命令進行編譯。

相關知識資料:

https://blog.csdn.net/qq_35451572/article/details/81092902

(1) 在源代碼目錄下編寫Makefile文件

 

注意

輸入: make all --- 生成libcalc.a,libshow.so庫和main可執行程序

    make lib --- 生成libcalc.a,libshow.so

    make clean --- 清除目標文件

輸入: export LD_LIBRARY_PATH=`pwd`   添加當前路徑到動態庫路徑環境變量LD_LIBRARY_PATH

輸入: ./main 測試結果.

 

實驗二 文件讀寫√

 實驗步驟1:編寫一個程序,調用時帶兩個參數。程序運行後在文件所在目錄有名爲參數1的文件,而且文件內容是參數2.(考驗帶參數的main函數和文件讀寫)

相關知識資料:

http://www.javashuo.com/article/p-bpncgwpy-nn.html

1.編寫C程序CreateWrite.c

#include<stdio.h>

#include<stdlib.h>

void main(int argc,char** argv)//argc表示入參個數,argv存儲全部入參

{

FILE *fp;

if((fp=fopen(argv[1],"wb"))==NULL){

printf("\nopen file Fail,close!");

getchar();

exit(1);

}

fputs(argv[2],fp);

fclose(fp);

}

 

2.編譯運行

gcc -c CreateWrite.c

gcc -o test CreateWrite.o

./test haha heihei

 

實驗三 進程通訊√

 實驗步驟1:編寫一個程序,實現父子進程間的通訊。要求:父進程每一個人3s向子進程發送並打印一條「Hello-n」消息,n從0開始遞增。子進程接收父進程消息就打印這條消息。(程序當按下Ctrl+C中止)

相關知識資料:

https://blog.csdn.net/xiaokedou_hust/article/details/53312341

http://www.javashuo.com/article/p-gewsbyyp-cu.html

 

代碼:

#include<stdio.h>

#include<unistd.h>

int main()

{

    int fd[2];  // 兩個文件描述符

    pid_t pid;

    char buff[20];

    char info[20];

    int counter=0;

    if(pipe(fd) < 0)  // 建立管道

        printf("Create Pipe Error!\n");

    if((pid = fork()) < 0)  // 建立子進程
    {
        printf("Fork Error!\n");
        return 0;
    }
    else if(pid == 0)  // 進程
    {
        while(1){
            close(fd[1]); // 關閉寫端
            read(fd[0], buff, 20);
            printf("%s\n", buff);
        }
    }
    else
    {
        while(1){
            close(fd[0]); // 關閉讀端
            sprintf(info,"Hello-%d",counter);
            sleep(3);
            write(fd[1], info,20);
            counter++;
        }
    }
    return 0;
}
相關文章
相關標籤/搜索