Linux环境下C语言编程实验报告
Linux环境下C语言编程实验报告
Xi邮电大学(计算机学院)
课堂实验报告
实验名称:Linux环境下的C语言编程
专业名称:网络工程
班(3)掌握gdb调试方法
2,实验内容1。
编辑测试源代码2.gcc编译测试源代码3。
gdb调试和调试3.实验步骤
1。
编辑以下参考源代码。
该代码的初衷是以相反的顺序输出主函数中定义的字符串
# include int display 1(char * string)。
int display 2(char *字符串);p I int main(){
字符字符串[] = \nWelcom到Linux\
display1(字符串);display2(字符串);}
int display 1(char * string){
printf(\ }
int display 2(char * string 1){
char * string 2;int大小,I;
size = strlen(string 1);
string 2 =(char *)malloc(size+1);对于(I = 0;I printf(\ }
2。
使用gcc将参考源代码编译成可执行文件3.运行可执行文件,观察运行结果并记录下来
4。
使用gdb调试器找出错误的原因,并通过设置断点和单步跟踪进行记录。
5.纠正错误,修改参考源代码并记录下来
6。
使用gcc将参考源代码编译成可执行文件,观察运行结果并记录下来4.实验部分
5的截图和描述,总结了
Gcc和gdb确实是很好的工具,但是有些命令在
的时候没有清晰的记忆,不能完全掌握,真正的魅力无法实现,还有
很多参数需要在以后的实践中进一步研究。
我希望将来能继续经历这些。
gcc和gdb确实非常实用。
使用这些东西可以大大提高效率,特别是gdb和gdb。
实验一 Linux下C编程
实验一Linux下C编程一、实验目的1、熟悉Linux常用命令。
2、掌握gcc编译器、gdb调试器的使用方法。
3、会编写多文件的C程序,并使用gcc编译。
4、熟悉makefile的结构和编制,利用make命令编译程序。
二、实验原理1、linux不以文件名后缀区分文件类型,但是通常将C源代码以.c结尾,事实证明,在使用GCC编译器时,是要求以.c结尾的。
2、在linux下,编写好的C程序需要编译为二进制的可执行文件才能运行;得到可执行文件要经过以下几个步骤:预处理→汇编→编译→链接→二进制可执行文件。
3、make工具,是程序的自动编译器。
利用时间戳检测文件修改的时间,查看当前哪些文件是更新的,只编译改变了的程序,是一个项目管理工具。
用于大型程序的编制,可节省时间,提高效率。
Makefile的基本格式:(1)目标体:目标文件/可执行文件。
(2)依赖文件。
(3)运行的命令(必须以Tab开头)。
Makefile具有隐含规则和模式规则。
隐含规则:同名的.c文件生成同名的.o文件,不用写main.o、print.o等的编译语句。
模式规则:相同名称的.c生成相同名称的.o文件,这种方式更加显式。
三、实验内容1、编写包含多文件的.c源码,通过调用自定义函数,实现功能:用户输入一个数字,程序计算并输出介于1至此数之间所有个位数为1的素数;如果不存在,则打印-1。
2、直接使用gcc编译多个源文件并运行结果。
3、通过创建动态链接库lib***.so,使得main函数调用自定义函数时,可使用动态链接库,编译生成运行结果。
4、编写Makefile文件,使用make编译并运行。
实验4:Linux C语言编程和调试
实验报告4课程名称:Linux基础实验名称:Linux C语言编程和调试学生姓名:班级:学号:指导老师:钱振江成绩:一、实验目的1.掌握Linux环境下C程序的编辑、编译、运行等操作;2.掌握多文件的编译及连接;3.初步掌握gdb调试方法;二、实验任务与要求1.在Linux环境下C程序的编辑、编译与运行;2.多文件的编译及连接;3.应用gdb调试程序;4.随机数的应用;三、实验工具与准备计算机PC机,Linux Ubuntu操作系统四、实验步骤与操作指导1.调试下列程序。
程序通过创建一个小型函数库,它包含两个函数,然后在一个示例程序中调用其中一个函数。
这两个函数分别是pro1和pro2。
按下面步骤生成函数库及测试函数库。
步骤1 为两个函数分别创建各自的源文件(将它们分别命名为pro1.c和pro2.c)。
[root@localhost root]# vi pro1.c#include <sdtio.h>void pro1(int arg){printf(“hello:%d\n”,arg) ;}[root@localhost root]# vi pro2.c#include <sdtio.h>void pro2(char *arg){printf(“您好:%s\n”,arg) ;}步骤2 分别编译这两个文件,生成要包含在库文件中的目标文件。
这通过调用带有-c 选项的gcc编译器来实现,-c选项的作用是阻止编译器创建一个完整的程序,gcc将把源程序编译成目标程序,文件名为以.o结尾。
如果此时试图创建一个完整的程序将不会成功,因为还未定义main函数。
[root@localhost root]# gcc -c pro1.c pro2.c[root@localhost root]# ls *.opro1.o pro2.o步骤3 现在编写一个调用pro2函数的程序。
首先,为库文件创建一个头文件lib.h。
实验三 LINUX下的C程序设计
实验三Linux下的C程序设计【内容提要】熟悉linux下的C程序设计工具。
掌握vi、gcc、gdb等软件的用法。
在基本实验的基础上重点掌握3个案例的编程。
这3个案例分别是:文件拷贝程序设计、猜数字游戏设计、进程调用程序设计、多文件项目的AUTOTOOLS应用。
【考核内容】随机抽取1个案例进行闭卷式机考即编辑、编译、调试与运行和结果分析。
3.1 实验目的通过vi或emacs和gcc的熟练使用,掌握linux下C程序的设计、调试与运行的原理、方法与应用技能。
通过进程编程,掌握进程程序的设计、调试、运行等以及相关知识。
通过autotools的练习,掌握使用make的自动安装与压缩文件的制作技术。
3.2 实验要求1.充分复习教材中有关实验的内容。
2.实验前根据实验目的和本人的情况设计出简单程序、分支程序、循环程序;写出实验中要解决的问题。
3.把相应的程序上机调试通过。
4.实验之后写出实验报告。
3.3实验过程1. 编写一个c语言源程序。
实现从键盘输入n个整数,在内存中自小到大排序后输出。
要求在vi或emacs中编辑、用gcc编译连接运行、用gdb进行调试,记录输出的结果并分析。
其中gdb用法见附录3的内容。
2.文件拷贝程序设计本程序的功能是实现两文件的拷贝,要求输入源文件名和目标文件名。
#include <stdio.h>#include <stdlib.h>main( ){char c;char name1[20],name2[20];FILE *fp1,*fp2;printf(“Input sorfilname:”);scanf(“%s”,name1);printf(“Input desfilname:”);scanf(“%s”,name2);fp1=fopen(name1,”r”);if(fp1==NULL){ printf(“Cannot open rfile \n”);exit (1);}fp2=fopen(name2,”w”);if(fp2==NULL){printf(“Cannot open wfile \n”); exit (1);}while((c=fgetc(fp1))!=EOF)fputc(c,fp2);fclose(fp1);fclose(fp2);printf(“copy complete!\n”);}此程序经过编译链接和执行后,其结果如图7所示。
实验报告linux编程
实验报告linux编程实验报告:Linux编程引言:Linux操作系统是一种开源的操作系统,具有高度的灵活性和可定制性。
在本次实验中,我们将探索Linux编程的基本概念和技术。
通过编写简单的程序,我们将了解Linux系统的工作原理以及如何利用其强大的功能来开发应用程序。
一、Linux操作系统简介Linux操作系统是一种基于Unix的开源操作系统,它由许多不同的组件组成,包括内核、命令行工具和图形界面等。
Linux操作系统具有许多优势,如稳定性、安全性和可扩展性。
它广泛用于服务器、嵌入式设备和个人电脑等领域。
二、Linux编程环境搭建1. 安装Linux操作系统:选择适合自己的Linux发行版,如Ubuntu、Fedora等,并按照官方指南进行安装。
2. 安装开发工具:在Linux系统上进行编程需要安装一些开发工具,如GCC编译器、GNU调试器(GDB)等。
三、Linux编程基础1. Shell脚本编程:Shell是Linux系统的命令行解释器,通过编写Shell脚本可以实现自动化任务和批处理任务。
Shell脚本使用一些特定的语法和命令来执行任务。
2. C语言编程:C语言是Linux系统中最常用的编程语言之一,通过编写C程序可以实现更高级的功能。
C语言提供了丰富的库函数和系统调用,可以与Linux系统进行交互。
四、Linux系统编程1. 进程管理:Linux系统是一个多进程的操作系统,通过编写程序可以创建、管理和控制进程。
可以使用fork()和exec()等系统调用来创建新进程,使用wait()和kill()等系统调用来管理进程。
2. 文件操作:Linux系统中的文件操作是非常重要的一部分,通过编写程序可以实现文件的读取、写入和修改等功能。
可以使用open()、read()和write()等系统调用来进行文件操作。
3. 网络编程:Linux系统支持网络编程,通过编写程序可以实现网络通信的功能。
可以使用socket()和bind()等系统调用来创建和管理网络套接字。
用C语言模拟Linux操作系统下处理机调度实验报告
实验二:处理机调度一、实验目的:1、了解Linux下Emacs编辑器的使用方法,掌握各种常用的键盘操作命令;2、理解并掌握处理机调度算法。
二、实验内容及要求:在采用多道系统的设计程序中,往往有若干进程同时处于就绪状态。
当就绪状态进程数大于处理机数时,就必须按照某种策略来决定哪些进程优先占用处理机。
本实验模拟在单处理机情况下处理机调度。
1、优先调度算法实现处理机的调度:设计思路:1每个进程用一个进程控制块PCB来代表,进程控制块包括进程名(进程的标识、指针(按优先数的大小把进程连成队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针为"0"、要求运行时间、优先数、状态(就绪、结束;2每次运行处理机调度程序前,为每个进程确定它的"优先数"和"要求运行时间";3把给定的进程按优先数的大小连成队列,用一单元指出队首进程;4每模拟执行一次进程,优先数减一,要求运行时间减一;5如果要求运行的时间>=0,再将它加入队列(按优先数的大小插入,重置队首标志);如果要求运行的时间=0,那么把它的状态修改为结束,且推出队列;6若就绪队列不为空,重复上述,直到所有的进程都结束;7程序有显示和打印语句,每次运行后显示变化。
2、按时间片轮转法实现处理机调度:设计思路:1每个进程用一个进程控制块PCB来代表,进程控制块包括进程名(进程的标识、指针(把进程连成循环队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址、已运行时间、状态(就绪、结束;2每次运行处理机调度程序前,为每个进程确定它的"要求运行时间";3用指针把给定的进程按顺序排成循环队列,用另一标志单元记录轮到的进程;4每模拟运行一次进程,已运行时间加一;5进程运行一次后,把该进程控制块的指针值送到标志单元,以指示下一个轮到的进程。
实验四:Linux系统下C编程
•
2011年9月11日 年 月 日 4
gcc的使用 的使用
• 基本使用格式
– $ gcc [ 选项 ] <文件名 文件名> 文件名
• 常用选项及含义
gcc常用选项 常用选项 选项 -o file 含义 将经过gcc处理过的结果存为文件 将经过gcc处理过的结果存为文件file,这个结果文件可 gcc 能是预处理文件、汇编文件、 能是预处理文件、汇编文件、目标文件或者最终的可 执行文件。假设被处理的源文件为source.suffix source.suffix, 执行文件。假设被处理的源文件为source.suffix,如 果这个选项被省略了, 果这个选项被省略了,那么生成的可执行文件默认名 称为a.out 目标文件默认名为source.o a.out; source.o; 称为a.out;目标文件默认名为source.o;汇编文件默 认名为source.s source.s; 认名为source.s;生成的预处理文件则发送到标准输 出设备。 出设备。
• 思路: 思路:
– 编译每一个 文件,得到 的目标文件; 编译每一个.c文件 得到.o的目标文件 文件, 的目标文件; – 将每一个.o的目标文件链接成一个可执行的文件; 将每一个 的目标文件链接成一个可执行的文件; 的目标文件链接成一个可执行的文件
2011年9月11日 年 月 日
15
使用make工具 工具 使用 • 适用场合: 适用场合:
2011年9月11日 年 月 日 10
生成汇编文件
• 命令
– $gcc –S hello.c –o hello.s
汇编文件hello.s的部分内容 汇编文件 的部分内容 ...... main: pushl movl ........ addl movl leave ret ......" $16, %esp $0, %eax %ebp %esp, %ebp
实验7 linux环境C语言编程
2
湖南第一师范学院
二.
实验内容:
进行编程、 用Vi、gcc、gdb进行编程、调试、和编译。 、 、 进行编程 调试、和编译。
3
湖南第一师范学院
三、实验步骤
1、gcc编程。 、 编程。 编程 (1)用vi编写一个简单的程序,如: ) 编写一个简单的程序, 编写一个简单的程序 ‘Hello World’、‘列举 、 列举100以内所有的 以内所有的 质数’ 百钱买百鸡问题’ 质数’、‘百钱买百鸡问题’、‘打印九 九乘法表’ 九乘法表’。 调试、 (2)用gdb、gcc调试、编译该程序 ) 、 调试 (3)运行相应程序 )
7
湖南第一师范学院
5
湖南第一师范学院ቤተ መጻሕፍቲ ባይዱ
void my_print(char *string) { printf("The string is %sn",string); } void my_print2(char *string) { char *string2; int size,i; size=strlen(string); string2=(char *)malloc(size+1); for (i=0;i<size;i++) string2[size-i]=string; string2[size+1]='0'; printf("The string printed backwand is %sn",string2); }
1掌握linux编程的基本方法2练习编写简单的c程序3读懂makefile文件能根据makefile文件理清程序结构4能编写简单makefile湖南第一师范学院实验内容
实验7 环境C语言编程 实验 linux环境 语言编程 环境
实验四 Linux下的C语言编程以及GCC工具的使用
实验四Linux下的C语言编程以及GCC工具的使用【实验目的】了解Linux下的用户管理机制,熟练掌握Linux下的C语言编程以及GCC工具的使用。
【预备知识】复习C/C++语言的基本技能、用户管理知识和GCC使用的内容。
【实验要求】Linux系统管理的一项重要工作就是用户管理。
用户的口令以加密的形式存储在/etc/shadow文件中.弱口令就是很容易被猜出来的口令,比如与用户名相同的口令、常用的单词口令等。
管理员应该定期检测系统中是否存在弱口令。
试编写一个C语言程序,主动检查自己的Linux系统中是否存在弱口令。
【实验步骤】1)分析/etc/shadow文件的格式。
可以查看自己的系统中该文件的格式,根据8.1节的介绍,该文件的每一行对应一个用户,下面是一个系统中/etc/shadow文件的实例:root:$1$j33ff543SWQ/C7Swn6jR9xyfoEcLaS.:12912:0:99999:7:::bin:*:12834:0:99999:7:::daemon:*:12834:0:99999:7:::2)了解Linux下口令加密的原理。
口令的加密是使用Linux系统的crypt函数实现的。
使用info或者man可以了解该命令的工作原理。
它使用包含12个字符的字符串作为种子salt,将用户输入的口令key进行加密pwd=crypt(key.salt),将所得的包含34个字符的字符串存入,etc,shadow文件的第2个字段,这34个字符的前12个就是salt。
当给用户设置口令时,种子是由系统随机选取的。
当用户在登录界面中输入自己的口令时,系统使用crypt进行上述计算,如果所得的结果与/etc/shadow中存储的一致,则允许用户登录。
3)检查弱口令。
弱口令就是很容易被猜出来的口令。
比如admin、guest、fllower、123456、beauty等。
在口令猜测或者破解时,一般不会穷尽所有字符的所有排列组合,一般使用弱口令字典,字典中包含常被用来作为口令的字符串。
操作系统实验 Linux下C程序及运行结果
实验内容:
消息的创建,发送和接收
使用系统调用msgget(),msgsnd(), msgrev()及msgctl()编制一长度为1k的消息发送
和接收程序。
<程序设计>
为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,
SERVER和CLIENT,进行通信。
SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型
if(p2==0) putchar('c');
else putchar('a');
}
}
进程1截图如下:
进程2程序如下:
#include <stdio.h>
main( )
{
int p1,p2,i; while((p1=fork( ))==-1);
/*创建子进程p1*/
if (p1==0)
while((i=fork())==-1);
if(!i) CLIENT();
wait(0);
wait(0);
}
实验截图如下:
实验四 存储管理
1 实验目的:
通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
2 实验内容:
通过随机数产生一个指令序列,共320条指令;
int tm_mon; //代表目前月份,从一月算起,范围从0-11 int tm_year; //从1900 年算起至今的年数
int tm_wday; //一星期的日数,从星期一算起,范围为0-6 int tm_yday; //从今年1月1日算起至今的天数,范围为0-365
int tm_isdst; //日光节约时间的旗标 };
linux编程 实验报告
linux编程实验报告Linux编程实验报告一、引言Linux操作系统是一种自由开源的操作系统,具有稳定性、安全性和灵活性等优点,被广泛应用于服务器、嵌入式系统和个人电脑等领域。
本实验旨在通过编程实践,探索Linux编程的基本概念和技术,并通过实验结果验证相关理论。
二、实验目的本实验的主要目的是通过编写C语言程序,理解Linux系统调用的原理和使用方法。
具体目标包括:1. 熟悉Linux系统调用的概念和基本原理;2. 掌握Linux系统调用的常用函数及其使用方法;3. 理解文件操作、进程管理和网络编程等方面的基本知识。
三、实验环境本实验使用的实验环境为Ubuntu 20.04 LTS操作系统。
在该系统上,我们可以使用gcc编译器编译C语言程序,并通过终端执行程序。
四、实验内容1. 文件操作文件操作是Linux编程中的重要内容之一。
通过使用系统调用函数,我们可以实现对文件的读写、创建和删除等操作。
在本实验中,我们编写了一个简单的文件复制程序,实现将一个文件的内容复制到另一个文件中。
2. 进程管理进程是Linux系统中的基本执行单元。
通过创建和管理进程,我们可以实现并发执行和多任务处理等功能。
在本实验中,我们编写了一个简单的多进程程序,实现同时执行多个任务的效果。
3. 网络编程网络编程是Linux编程中的一个重要领域,它涉及到网络通信、套接字编程和网络协议等内容。
在本实验中,我们编写了一个简单的客户端-服务器程序,实现了基于TCP协议的网络通信。
五、实验结果与分析通过实验,我们成功编写了文件复制程序、多进程程序和客户端-服务器程序,并在实验环境中运行和测试了这些程序。
实验结果表明,我们对Linux编程的基本概念和技术有了初步的理解和掌握。
在文件复制程序中,我们使用了open、read和write等系统调用函数,实现了将源文件的内容复制到目标文件中。
通过实验测试,我们发现该程序能够正确地复制文件,保持了源文件的内容和结构。
