Linux系统实验
前言:怎么感觉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文件
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[],"wb"))==NULL){
printf("\nopen file Fail,close!");
getchar();
exit();
}
fputs(argv[],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[]; // 两个文件描述符
pid_t pid;
char buff[];
char info[];
int counter=;
if(pipe(fd) < ) // 创建管道
printf("Create Pipe Error!\n");
if((pid = fork()) < ) // 创建子进程
{
printf("Fork Error!\n");
return ;
}
else if(pid == ) // 进程
{
while(){
close(fd[]); // 关闭写端
read(fd[], buff, );
printf("%s\n", buff);
}
}
else
{
while(){
close(fd[]); // 关闭读端
sprintf(info,"Hello-%d",counter);
sleep();
write(fd[], info,);
counter++;
}
}
return ;
}
Linux系统实验的更多相关文章
- Holer实现外网访问ARM嵌入式Linux系统
公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...
- 外网访问ARM嵌入式Linux系统
外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...
- 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记
此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...
- 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...
- 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS
Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- 《linux系统及其编程》实验课记录(六)
实验 6:Linux 文件系统 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student ...
- 《linux系统及其编程》实验课记录(五)
实验 5:权限的设置和更改 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student 的 ...
- 《linux系统及其编程》实验课记录(一)
实验 1:登录和使用基本的 Linux 命令 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统. 有另外一个无特权用户 student,密码 ...
- spark实验(一)--linux系统常见命令及其文件互传(2)
2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...
随机推荐
- 八核浮点型DSP的双千兆网接口设计方案
千兆网络接口具有数据传输速率快.连接方便.可以即插即用的优点,使得其应用较为广泛.随着电子技术和处理器的发展,很多应用场合的数据通信速率超过千兆网口的实际传输速率.例如,在A/D采样中,需要直接存储A ...
- Linux中检查内存使用情况的命令
Linux操作系统包含大量工具,所有这些工具都可以帮助您管理系统.从简单的文件和目录工具到非常复杂的安全命令,在Linux上没有太多不能做的事情.而且,虽然普通桌面用户可能不需要在命令行熟悉这些工具, ...
- Linux命令行工具之free命令
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11524691.html 使用 free 查看整个系统的内存使用情况 Note:不同版本的free输出可 ...
- Arrays.asList()报错java.lang.UnsupportedOperationException
问题: 使用工具类Arrays.asList()方法把数组转换成集合时,不能使用修改集合相关的方法,比如add,remove.这个ArrayList是Arrays类自己定义的一个内部类!这个内部类没有 ...
- 随手记--QT
设置toolButton按钮隐藏(可视化): ui->toolButton->setVisible(true); 改变按钮背景色: ui->toolButton->setSty ...
- C++ 递推法 斐波那契数列 兔子产仔
#include "stdio.h" #include "iostream" int Fibonacci(int n) { int t1, t2; || n = ...
- 使用vue-i18n实现项目的国际化 以及iview的国际化
一:项目的国际化 vue-i18n官网 1. 在src中新建一个language文件夹(包含index.js.US.js.CN.js) (1)US.js 保存变量的英文,内容: export defa ...
- mysql8.0.15出错
昨天装了一个wireshark,一个fiddler,导致晚上项目启动一直报init database出错,卸载了两个软件,还是不行,后来一看mysql服务停止了,但启动总是失败.按照网上的方法好了. ...
- Fail-Fast 机制
Java 集合(Collection)的一种错误机制: 当多个线程操作集合时,就有可能产生这个错误. 当某个线程正在迭代这个集合的时候,另外一个线程对这个集合做了修改就会产生ConcurrentMod ...
- (转)ping: www.baidu.com: Name or service not known centos7 -bash: ifconfig: command not found
[root@mysqlcentos01 ~]# ping www.baidu.com ping: www.baidu.com: Name or service not known [root@mysq ...