Linux系统实验

前言:怎么感觉Linux运维和Linux系统实验没什么关系?该不会的还是不会(@@)。记录一下几个实验吧。

本篇目录:

实验一 编程环境

实验二 文件读写

实验三 进程通信


实验一 编程环境√

实验步骤1:在Linux操作系统中编写一个程序,实现在bash中的输出“Hello World”。

(1) 在命令终端中输入touch test.sh命令,以创建一个bash脚本

(2) 在编辑器中打开test.sh,并输入以下代码并保存

 

(3) 接着在终端输入 ./test.sh 以运行bash脚本

 

 

实验步骤2:编写一个程序输入一组数据,输出该数据的平均值。(要有头文件,有AVE函数的声明)

(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中调用。

相关知识资料:

https://www.cnblogs.com/codingmengmeng/p/6046481.html

https://www.cnblogs.com/mylinux/p/5866781.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函数和文件读写)

相关知识资料:

https://blog.csdn.net/woshiwangbiao/article/details/53379392

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

https://www.cnblogs.com/noticeable/p/8516174.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;
}

 

posted @ 2019-10-18 12:40  省所行  阅读(5859)  评论(0编辑  收藏  举报