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

本篇目录:

实验一 编程环境

实验二 文件读写

实验三 进程通信


实验一 编程环境√

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

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

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

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

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

(1) 建立AVE.c和AVE.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.c和AVE.h相同。

SAVE.c和SAVE.h

DAVE.c和DAVE.h

(2) 创建静态库.a及在main.c中调用

1.先将SAVE.c编译生成.o文件

  1. gcc -c -o SAVE.o SAVE.c

2.通过ar工具将目标文件打包成静态库文件.a

  1. ar -rc libSAVE.a SAVE.o

3.编译main.c时加入libSAVE.a

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

4.执行main_static

(3) 创建动态库.so及在main.c中调用

1.将DAVE.c生成动态链接库

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

2.编译main.c时加入libDAVE.so

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

3.将文件 libhelloworld.so复制到目录/usr/lib中

  1. 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

  1. #include<stdio.h>
  2.  
  3. #include<stdlib.h>
  4.  
  5. void main(int argc,char** argv)//argc表示入参个数,argv存储所有入参
  6.  
  7. {
  8.  
  9. FILE *fp;
  10.  
  11. if((fp=fopen(argv[],"wb"))==NULL){
  12.  
  13. printf("\nopen file Fail,close!");
  14.  
  15. getchar();
  16.  
  17. exit();
  18.  
  19. }
  20.  
  21. fputs(argv[],fp);
  22.  
  23. fclose(fp);
  24.  
  25. }

2.编译运行

  1. gcc -c CreateWrite.c
  2.  
  3. gcc -o test CreateWrite.o
  4.  
  5. ./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

代码:

  1. #include<stdio.h>
  2.  
  3. #include<unistd.h>
  4.  
  5. int main()
  6.  
  7. {
  8.  
  9. int fd[]; // 两个文件描述符
  10.  
  11. pid_t pid;
  12.  
  13. char buff[];
  14.  
  15. char info[];
  16.  
  17. int counter=;
  18.  
  19. if(pipe(fd) < ) // 创建管道
  20.  
  21. printf("Create Pipe Error!\n");
  22.  
  23. if((pid = fork()) < ) // 创建子进程
  24. {
  25. printf("Fork Error!\n");
  26. return ;
  27. }
  28. else if(pid == ) // 进程
  29. {
  30. while(){
  31. close(fd[]); // 关闭写端
  32. read(fd[], buff, );
  33. printf("%s\n", buff);
  34. }
  35. }
  36. else
  37. {
  38. while(){
  39. close(fd[]); // 关闭读端
  40. sprintf(info,"Hello-%d",counter);
  41. sleep();
  42. write(fd[], info,);
  43. counter++;
  44. }
  45. }
  46. return ;
  47. }

Linux系统实验的更多相关文章

  1. Holer实现外网访问ARM嵌入式Linux系统

    公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...

  2. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  3. 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记

    此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...

  4. 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...

  5. 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  6. 《linux系统及其编程》实验课记录(六)

    实验 6:Linux 文件系统 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student ...

  7. 《linux系统及其编程》实验课记录(五)

    实验 5:权限的设置和更改 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student 的 ...

  8. 《linux系统及其编程》实验课记录(一)

    实验 1:登录和使用基本的 Linux 命令 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统. 有另外一个无特权用户 student,密码 ...

  9. spark实验(一)--linux系统常见命令及其文件互传(2)

    2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...

随机推荐

  1. navigate连接不上Centos7+mariadb的问题

    链接数据库时忽然遇到一个问题.Mac Navicat链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat ...

  2. ssh-keygen - 认证密钥的产生, 管理和转换

    总览 (SYNOPSIS) ssh-keygen -words [-q ] [-b bits ] -t type [-N new_passphrase ] [-C comment ] [-f outp ...

  3. jenkins部署的零碎知识

    环境要求 1)版本控制子系统(SVN):SVN服务器.项目对应版本库.版本库中钩子程序(提交代码后,触发Jenkins自动打包并部署到应用服务器)(2)持续集成子系统(存在Jenkins的服务器):J ...

  4. DB count check for TABLES VIEWS PROCEDURES TRIGGERS

    SELECT DISTINCT(TABLESPACE_NAME) FROM ALL_TABLES; SELECT COUNT(*) FROM ALL_TABLES where TABLESPACE_N ...

  5. 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索

    题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...

  6. Flutter-底部導航欄切換

    程序入口 import 'package:flutter/material.dart'; import 'botton_navigation_widget.dart'; void main() =&g ...

  7. JavaSE---多线程---扩展

    1.线程的类型 1.1 用户线程 1.2 内核线程 2.java线程 java线程的创建依赖于系统内核,通过JVM调用系统库创建内核线程: 内核线程与java-Thread是1:1的映射关系: 3.线 ...

  8. javaScript的关键字与保留字

    JavaScript 关键字: break case catch continue default delete do else finally for function if in instance ...

  9. android android studio error

    SIMPLE: Error computing //cmake 包含的跨平台头文件或者是源文件路径出错

  10. 原理图和PCB元件对应查找--Altium Designer

    画PCB的时候,需要经常的去查看原理图上对应的元件,元件数目少还好找,数目多了找起来就比较扯淡.还好Altium Designer提供了不错的交叉查找功能. 建议使用两个显示器,一个显示器放原理图,另 ...