【操作系统】初识Linux

简介: 【操作系统】初识Linux

一. 实验目的

(1)掌握Linux操作系统的安装方法、控制台常用命令

(2)掌握Linux下C程序的编写、编译与运行方法

(3)掌握gcc编译器的编译过程

(4)熟悉Makefile文件的编写格式

二. 实验内容

(1)实验室里的计算机安装了Windows操作系统,可以先安装VMWare软件(一般使用工作站版本)并启动它,来创建一个虚拟机,然后在其中安装Linux操作系统。登录Linux操作系统,回答下列问题:

  • CPU的类型和型号。
  • 所使用的Linux的版本。
  • 从启动到当前时刻所经过的时间。
  • 当前内存状态。

(2)编写简单的C程序,在屏幕上输出“Hello gcc!”。利用该程序练习gcc编译器的E、S、c、o选项,观察不同阶段生成的文件,即*.c、*.i、*.s、*.o文件。

(3)编写一个由头文件greeting.h、自定义函数文件greeting.c、主函数文件myapp.c构成的C程序,根据这三个文件的依赖关系编写Makefile文件。

三. 实验步骤

(1)安装Linux

查看CPU的类型和型号:cat /proc/cpuinfo | grep “model name”

查看所使用的Linux的版本:cat /etc/issue

查看从启动到当前时刻所经过的时间:uptime

查看当前内存状态:free -m

(2)编写C程序

C程序:

#include <stdio.h>
int main(){
    printf("Hello gcc!");
    return 0;
}

预处理:gcc -E hello.c -o hello.i


编译:gcc -S hello.c -o hello.s


汇编:gcc -c hello.c -o hello.o


链接:gcc hello.c -o hello


(3)编写Makefile文件


greeting.h源代码:

#ifndef _GREETING_H
#define _GREETING_H
void greeting(char *name);
#endif

greeting.c源代码:

#include <stdio.h>
#include "greeting.h"
void greeting(char *name)
{
    printf("Hello %s\n", name);
}

myapp.c源代码:

#include <stdio.h>
#include <stdlib.h>
#include "greeting.h"
#define N 10
int main(){
    char name[N];
    printf("your name, please:");
    scanf("%s", name);
    greeting(name);
    exit(0);
}

Makefile文件:

myapp: greeting.o myapp.o
        gcc myapp.o greeting.o -o myapp
greeting.o: greeting.c greeting.h
        gcc -c greeting.c
myapp.o: myapp.c greeting.h
        gcc -c myapp.c
clean:
        rm -rf *.o

四. 实验结果

(1)安装Linux

(2)编写C程序

(3)编写Makefile文件

五. 实验总结

Makefile是一种自动化构建工具,用来描述源文件之间的依赖关系以及编译、链接等操作步骤,可以使编译、链接等操作自动化。在编译C程序时,使用Makefile可以大大简化编译过程。

编写Makefile的基本原则:

  1. 每个目标文件应该只由一个源文件生成。
  2. 每个源文件应该只编译一次,以提高编译效率。
  3. 应该在Makefile中指定编译器和编译选项。

下面简要介绍使用Makefile编译C程序的过程:

  1. 定义目标文件及依赖关系

在Makefile中,定义目标文件及其依赖文件是必须的。目标文件是要生成的二进制文件,依赖文件则是生成目标文件所需要的源文件及其头文件。

示例:

main: main.o function1.o function2.o

这段代码表示生成目标文件main,其依赖文件包括main.c、function1.c、function2.c和它们对应的头文件。

  1. 定义编译规则

在Makefile中,需要定义编译规则,即定义如何编译目标文件。

示例:

main.o: main.c function1.h function2.h
    gcc -c main.c

这段代码表示编译main.c生成main.o,-c表示只编译不链接。

  1. 定义链接规则

在Makefile中,需要定义链接规则,即定义如何将目标文件链接成最终的可执行文件。

示例:

main: main.o function1.o function2.o
    gcc -o main main.o function1.o function2.o

这段代码表示将main.o、function1.o、function2.o链接成可执行文件main。

  1. 完整的Makefile示例
main: main.o function1.o function2.o
    gcc -o main main.o function1.o function2.o
main.o: main.c function1.h function2.h
    gcc -c main.c
function1.o: function1.c function1.h
    gcc -c function1.c
function2.o: function2.c function2.h
    gcc -c function2.c
目录
相关文章
|
7月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
6月前
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
150 1
|
2月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
110 0
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
112 18
|
4月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
124 10
|
9月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
257 1
|
7月前
|
Linux
Linux 操作系统
在 Linux 中,UID(用户 ID)是标识用户身份的重要概念。UID 唯一标识每个用户,通过 UID 可区分不同用户类别:UID 0 为超级用户,1-999 为系统用户,1000 及以上为普通用户。因此,正确选项为:UID 标识用户、可区分用户类别、普通用户 UID 大于 1000。
|
7月前
|
NoSQL Unix Linux
Linux 操作系统的诞生与发展历程
步探索与准备: 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。通过学习,他逐渐不能满足于minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。
213 8
Linux 操作系统的诞生与发展历程
|
7月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
366 10
|
8月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
1336 23