linux实验4

实验四 Linux系统C开发工具的使用

学号:6130116217

专业班级:计算机科学与技术165班

课程名称:Linux程序设计实验

一、实验项目名称

Linux系统C开发工具的使用

二、实验目的

熟悉Linux 系统开发工具的使用

三、实验基本原理

1.程序的编辑、编译、运行和调试过程
2.库的建立与使用

四、主要仪器设备及耗材

硬件: PC机;
软件:WindowsOS,VMware,Fedora10.0或其他Linux发行版。

五、实验步骤

1.程序的编辑、编译、运行与调试

(1)编辑源程序:tst.c

#include <stdio.h>
int func(int n)
{
    int sum=0,i;
    for(i=0; i<n; i++)
    {
        sum+=i;
    }
    return sum;
}

int main()
{
    int i;
    long result = 0;
    for(i=1; i<=100; i++)
    {
        result += i;
    }
    printf("result[1-100] = %d \n", result );
    printf("result[1-250] = %d \n", func(250) );
    return 0;
}

在这里插入图片描述

(2) 编译生成执行文件
[root@localhost ~]# gcc -g tst.c -o tst
(注意必须有 –g 参数,否则执行代码无调试信息)
在这里插入图片描述
(3) 执行程序
[root@localhost ~]# ./tst
result[1-100] = 5050
result[1-250] = 31125
在这里插入图片描述
(4)使用gdb进行C语言级调试
[root@localhost ~]# gdb tst <---------- 启动gdb
在这里插入图片描述
使用命令l查看源代码,一次十行
在这里插入图片描述
在这里插入图片描述
b 21设置断点
在这里插入图片描述
Info b查看断点信息
在这里插入图片描述
r开始运行程序
在这里插入图片描述
p命令查看变量i与result的值
在这里插入图片描述
set命令设置变量值
set result=2019
p result
在这里插入图片描述
n(next)或者s(step)命令单步运行若有函数,调试时s会进入函数,n不会。
在这里插入图片描述
在这里插入图片描述
查看完变量或堆栈,输入c命令恢复程序正常运行
在这里插入图片描述
q(quit)命令推出gdb环境
在这里插入图片描述

2. 库的建立与使用

设计一个程序,统计学生的成绩,包括成绩的最大值、最小值、总和以及平均值。
(1)建立C程序 mymax.c

#include<stdio.h>
double max;
double mymax(double a[],int n)
{
    max=a[1];
    for(int i=2; i<=n; ++i)
        if(a[i]>max)
            max=a[i];
    return max;
}

(2)建立C程序 mymin.c

#include<stdio.h>
double min;
double mymin(double a[],int n)
{
    min=a[1];
    for(int i=2; i<=n; ++i)
        if(a[i]<min)
            min=a[i];
    return min;
}

(3)建立C程序 mysum.c

#include<stdio.h>
double sum;
double mysum(double a[],int n)
{
    for(int i=1; i<=n; ++i)
            sum+=a[i];
    return sum;
}

(4)建立C程序 myavg.c

#include<stdio.h>
#include"my.h"
double avg;
double myavg(double a[],int n)
{
    for(int i=1; i<=n; ++i)
        avg+=a[i];
    avg/=n;
    return avg;
}

(5)建立C程序 my.h

#ifndef MY_H_INCLUDED
#define MY_H_INCLUDED
double mymax(double *a,int n);
double mymin(double a[],int n);
double mysum(double a[],int n);
double myavg(double a[],int n);

#endif // MY_H_INCLUDED

(6)建立C程序 mymain.c

#include<stdio.h>
#include"my.h"
int n,i;
double a[2019];
int main()
{
    printf("Please input the number of students: \n");
    scanf("%d",&n);
    printf("please input the grades of students: \n");
    for(i=1; i<=n; ++i)
        scanf("%lf",&a[i]);

    printf("max:%lf \n",mymax(a,n));
    printf("min:%lf \n",mymin(a,n));
    printf("sum:%lf \n",mysum(a,n));
    printf("avg:%lf \n",myavg(a,n));
    return 0;
}

(7)建立静态库libmylib.a
在这里插入图片描述
在这里插入图片描述
(8)编译mymain.c程序
在这里插入图片描述
(9)执行mymain程序
在这里插入图片描述

3.将上述2中的程序利用make工程管理器进行编译

编辑makefile

mymain:mymain.o mymax.o mymin.o mysum.o myavg.o
        gcc -o mymain mymain.o mymax.o mymin.o mysum.o myavg.o
mymax.o:mymax.c
        gcc -c mymax.c
mymin.o:mymin.c
        gcc -c mymin.c
mysum.o:mysum.c
        gcc -c mysum.c
myavg.o:myavg.c
        gcc -c myavg.c
mymain.o:mymain.c
        gcc -c mymain.c

make编译
在这里插入图片描述
./mymain执行
在这里插入图片描述

六、实验数据及处理结果

对实验结果截图并给出实验总结。

七、思考讨论题

1. 对比共享库和静态库的差异

https://cloud.tencent.com/developer/article/1344879
答:
①静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。
动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。
②静态库和动态库的最大区别,静态情况下,把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。
③静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在
④静态库有一个缺点,当同时运行的许多应用程序都使用来自同一个函数库的函数时,就会在内存中有同一函数的多份拷贝文件,且程序文件自身也有多份同样的拷贝。这将大量消耗宝贵的内存和磁盘空间。共享库克服了这种不足,可以用来实现函数的动态链接。

2. 设计并完成一个Makefile文件,用于编译若干个.C文件。

Makefile3-10文件如下:

3-10:mymain.o mysum.o myavg.o mymax.o mymin.o
	gcc mymain.o mysum.o myavg.o mymax.o mymin.o -o 3-10
mymain.o: mymain.c my.h
	gcc mymain.c -c
mymax.o:mymax.c
	gcc mymax.c -c
mymin.o:mymin.c
	gcc mymin.c -c
mysum.o: mysum.c
	gcc mysum.c -c
myavg.o: myavg.c
	gcc myavg.c -c

八、参考资料

1.金国庆等,Linux程序设计(第二版),浙江大学出版社,2014年4月
2. Neil Matthew,《Linux程序设计》(第4版), 人民邮电出版社,2014年9月
3. 杨宗德,《Linux高级程序设计》(第三版),人民邮电出版社,2012年11月
4. Daniel P.,《深入理解Linux内核》(第三版),中国电力出版社,2013年1月

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 实验目的 1、通过实验了解和熟悉Linux网络服务; 2、掌握Linux下建立Web服务器; 3、掌握Linux下建立FTP服务器。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux网络服务 了解NFS网络文件系统,NFS网络文件系统架设及挂载方法,Web服务器的架设方法,FTP服务器的架设方法及访问方法,Samba服务器的架设方法。 2、Linux下建立Web服务器 (1)Apache 服务器的安装及启动 ●检测与安装 Apache rpm -qa | grep httpd ●如果没有检测到软件包,需要进行安装,在安装目录中,执行如下命令: rpm -ivh httpd-tools*. Rpm rpm -ivh mailcap-2.1.31-2.el6.noarch.rpm rpm - ivh httpd-2*. rpm rpm -ivh httpd-manual-2.*.rpm ●重新启动/停止/启动Apache服务: systemctl restart/stop/start httpd.service 或service httpd restart/stop/start ●查看 Apache服务器的运行状态: systemctl status httpd. service 或service httpd status ●测试 Apache服务器运行状态: 在图形界面打开火狐浏览器输入http://127. 0.0.1呈现测试页(CentOS 用户可以在终端使用lynx 浏览器打开,如没有安装,则使用rpm在光盘中安装lynx 浏览器) 在/var/www/html目录下创建test. html页面,使用vi编辑保存内容,重启apache服务 在火狐浏览器输入http://127. 0. 0.1/test. html查看test. html内容 (2)Apache 服务器的配置 Apache主要配置文件为httpd.conf,存储位置在/etc/httpd/conf目录下 (3)个人Web站点配置 RedHat方式: a:修改配置文件,使用vi编辑器修改主配置文件 /etc/httpd/conf/httpd. conf,修改如下配置,去掉原文中的注释符号 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点.UserDir public. _html//设 置对每个用户的Web站点目录 Allow0verride FileInfo AuthConfig Limit Opt ions MultiViews Indexes SymLinkIfOwnerMatch Inc ludeNoExec Order allow, deny Allow from all Order deny, allow Deny from all 保存文件退出,重启httpd服务 b:用户创建个人Web站点 从root用户身份切换成user1用户(如果没有普通用户,需要先创建普通用户): 在user1主目录下面创建个人站点目录$mkdir public_ html 到/home目录下修改user1目录权限 $chmod 711 user1 进入到public. _html 目录下使用vi创建index. html文件,保存退出重启httpd服务 在浏览器中输入网址http://127.0.0.1/ user1/index. html,查看效果======= CentOS方式: a:修改配置文件,使用vi编辑器修改/etc/httpd/ conf.d/userdir.conf修改成如下配置信息 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点 UserDir public_ html//设置对每个用户的Web站点目录 Allowverride None #修改为 None options None#修改为None Require method GET POST OPTIONS b:用户创建个人Web站点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值