为什么玩那个叫约糖的社交玩法APP约糖进去要认证费啊,可靠不可靠?

《Linux系统》课程实验项目_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《Linux系统》课程实验项目
上传于||文档简介
&&本​课​程​的​目​的​在​于​讲​授​L​i​n​u​x​操​作​系​统​的​基​础​和​应​用​知​识​,​使​学​生​掌​握​L​i​n​u​x​系​统​的​安​装​、​配​置​、​管​理​维​护​等​技​能​,​对​L​i​n​u​x​系​统​有​一​个​全​面​的​了​解​,​奠​定​在​L​i​n​u​x​系​统​上​建​立​网​站​或​作​进​一​步​开​发​的​基​础​。
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Linux下C编程基础之:make工程管理器
> Linux下C编程基础之:make工程管理器
Linux下C编程基础之:make工程管理器
本文引用地址:3.5linux操作系统文章专题:到此为止,读者已经了解了如何在下使用编辑器编写代码,如何使用gcc把代码编译成可执行文件,还学习了如何使用gdb来调试程序,那么,所有的工作看似已经完成了,为什么还需要make这个工程管理器呢?所谓工程管理器,顾名思义,是用于管理较多的文件。读者可以试想一下,由成百上千个文件构成的项目,如果其中只有一个或少数几个文件进行了修改,按照之前所学的gcc编译工具,就不得不把这所有的文件重新编译一遍,因为编译器并不知道哪些文件是最近更新的,而只知道需要包含这些文件才能把源代码编译成可执行文件,于是,程序员就不得不重新输入数目如此庞大的文件名以完成最后的编译工作。编译过程分为编译、汇编、链接阶段,其中编译阶段仅检查语法错误以及函数与变量是否被正确地声明了,在链接阶段则主要完成函数链接和全局变量的链接。因此,那些没有改动的源代码根本不需要重新编译,而只要把它们重新链接进去就可以了。所以,人们就希望有一个工程管理器能够自动识别更新了的文件代码,而不需要重复输入冗长的命令行,这样,就应运而生了。实际上,也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句就可以了。它大大提高了实际项目的工作效率,而且几乎所有下的项目编程均会涉及它,希望读者能够认真学习本节内容。3.5.1makefile基本结构makefile是make读入的惟一配置文件,因此本节的内容实际就是讲述makefile的编写规则。在一个makefile中通常包含如下内容:n 需要由make工具创建的目标体(target),通常是目标文件或可执行文件;n 要创建的目标体所依赖的文件(dependency_file);n 创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头。它的格式为:target:dependency_filescommand/*该行必须以tab键开头*/例如,有两个文件分别为hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc编译指令:gcc–chello.c,那么,对应的makefile就可以写为:#Thesimplestexamplehello.o:hello.chello.hgcc–chello.c–ohello.o接着就可以使用make了。使用make的格式为:maketarget,这样make就会自动读入makefile(也可以是首字母大写的)并执行对应target的command语句,并会找到相应的依赖文件。如下所示:[root@localhostmakefile]#makehello.ogcc–chello.c–ohello.o[root@localhostmakefile]#lshello.chello.hhello.omakefile可以看到,makefile执行了“hello.o”对应的命令语句,并生成了“hello.o”目标体。注意在makefile中的每一个command前必须有“Tab”符,否则在运行make命令时会出错。3.5.2makefile变量上面示例的makefile在实际中是几乎不存在的,因为它过于简单,仅包含两个文件和一个命令,在这种情况下完全不必要编写makefile而只需在shell中直接输入即可,在实际中使用的makefile往往是包含很多的文件和命令的,这也是makefile产生的原因。下面就可给出稍微复杂一些的makefile进行讲解。david:kang.oyul.ogcckang.obar.o-omyprogkang.o:kang.ckang.hhead.hgcc–Wall–O-g–ckang.c-okang.oyul.o:bar.chead.hgcc-Wall–O-g–cyul.c-oyul.o在这个makefile中有3个目标体(target),分别为david、kang.o和yul.o,其中第一个目标体的依赖文件就是后两个目标体。如果用户使用命令“makedavid”,则make管理器就是找到david目标体开始执行。这时,make会自动检查相关文件的时间戳。首先,在检查“kang.o”、“yul.o”和“david”3个文件的时间戳之前,它会向下查找那些把“kang.o”或“yul.o”作为目标文件的时间戳。比如,“kang.o”的依赖文件为“kang.c”、“kang.h”、“head.h”。如果这些文件中任何一个的时间戳比“kang.o”新,则命令“gcc–Wall–O-g–ckang.c-okang.o”将会执行,从而更新文件“kang.o”。在更新完“kang.o”或“yul.o”之后,make会检查最初的“kang.o”、“yul.o”和“david”3个文件,只要文件“kang.o”或“yul.o”中的至少有一个文件的时间戳比“david”新,则第二行命令就会被执行。这样,make就完成了自动检查时间戳的工作,开始执行编译工作。这也就是make工作的基本流程。接下来,为了进一步简化编辑和维护makefile,make允许在makefile中创建和使用变量。变量是在makefile中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。在具体要求下,这些值可以代替目标体、依赖文件、命令以及makefile文件中其他部分。在makefile中的变量定义有两种方式:一种是递归展开方式,另一种是简单方式。递归展开方式定义的变量是在引用该变量时进行替换的,即如果该变量包含了对其他变量的引用,则在引用该变量时一次性将内嵌的变量全部展开,虽然这种类型的变量能够很好地完成用户的指令,但是它也有严重的缺点,如不能在变量后追加内容(因为语句:CFLAGS=$(CFLAGS)-O在变量扩展过程中可能导致无穷循环)。
linux操作系统文章专题:
linux相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一实验六 Linux系统调用
实验六 Linux系统调用
一、实验目的和要求
1.学习Linux内核的配置和编译;2.深入理解Linux系统调用;3.理解ARM和x86的CPU模式(系统模式、用户模式等)的不同。4.掌握内核模块的编写方法。
二、实验内容和原理
2.1 基础内容
使用交叉编译工具或本机编译工具,通过Linux内核源码进行实验:
寻找、下载Linux实验板卡所用的Linux内核源码;
在内核中加入新的系统调用,具体功能没有要求,能输出调试信息即可;
修改内核代码配置,编译内核;
将编译好的内核装载到板卡启动;
编写C代码,用两种方法做系统调用,测试:
嵌入汇编代码,用r0传参数;
用syscall()函数。
编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息;
通过insmod和lsmod等命令测试内核模块
2.2 扩展内容
在x86 Linux上做相同的系统调用,比较两者的不同。
三、实验器材
microUSB线
PC(Windows)
USB-TTL串口线(FT232RL芯片或PL2303芯片)
USB键盘/鼠标
PC上的串口终端软件putty
交叉编译软件
四、操作方法与实验步骤
4.1 连接示意图
4.2 连接实物图
4.3 实验步骤
4.3.1下载内核源码
在上选择3.18版本的源码tar包,直接下载,然后放入linux系统用tar -xzf进行解压并命名为linux。
4.3.2增加系统调用
在linux/arch/arm/kernel/目录下新建mysyscall.c文件
2.在linux/arch/arm/kernel/call.S中添加新的系统调用
修改arch/arm/kernel/目录下的Makefile文件,在obj-y后面添加mysyscall.o
4.在include/uapi/asm-generic/unistd.h头文件中将223号调用与某个宏进行关联,在syscall()中注册一个位置,方便调用。
4.3.3 修改内核代码配置
连接树莓派获取config文件,将config文件放在linux文件下
项目配置编译出来的目标是针对ARM体系结构的。因为是针对ARM体系结构,所以需要使用交叉编译器。使用CROSS_COMPILE=xxx来指定交叉编译器。
4.3.4 编译内核
在顶层Linux目录下编译新内核:
编译module lib文件在linux的上层目录新建modules文件夹,进入linux内核代码所在文件夹,执行下面语句编译make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=../modules
4.3.5 讲编译好的内核装载到板卡上启动
将新的内核文件Image放进树莓派的/boot下
将modules/lib文件夹放进树莓派的根目录
Reboot重启树莓派
4.3.6编写系统调用程序
嵌入汇编代码,用r0传参数输入dmesg | tail查看结果
用syscall()函数
dmesg以后,发现函数调用已经成功添加
4.3.7 内核模块
编写内核模块Pid.c
Makefile文件设置
obj-m := pid.o
KERNEL_VER := 3.18.16-v7
KERNEL_DIR:=linux-rpi-3.18y
PWD := $(shell pwd)
ARGS := ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make -C $(KERNEL_DIR) SUBDIRS=$(PWD) $(ARGS) modules
rm *.o *.ko *.mod.c
.PHONY:clean
make交叉编译内核模块,生成pid.ko,通过scp放入树莓派中装载内核模块:已装载模块:
dmesg命令显示日志:
查看内核版本
五、讨论、心得
不知道什么原因,过了那么久再进行交叉编译就不成功啊,后来又去重新下载了交
叉编译链。
网上的教程很多,但是觉得都不太详尽,一边摸索一边做。
内核编译和系统调用在操作系统实验里有涉及到过,大概的实验步骤是相似的,就
是加了个ubuntu和树莓派之间传输文件。实验四 Linux 下的 C 语言编程
实验类别:设计型 开课单位:计算机学院计算机科学与技术系 实验时数:6 学时 实验地点:健翔校区计算中心
一、实验目的
通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先 要熟悉在 LINUX 系统下文件系统的构建方法;其次要熟练掌握在 LINUX 环境下用 C 语言进行高级编程的方法(即有关文件操作的系统调用的使 用) ,进而充分了解 LINUX 文件系统中 shell 命令的实现原理以及它们用到 的系统调用。
二、实验环境
操作系统:任何 Unix/Linux 及 Sun Solaris 或 windows 系列 应用系统:gcc 编译器。若 OS 为 windows 系列,则还需相应的模拟环境
三、预备知识
1、 关于系统调用和库函数 C 语言支持一系列的库函数的调用,其中最基本的是 studio 库函数。事 实上,库函数只是 C 语言在较高层次上调用的方式,系统调用是更低 层次的与 C 语言的界面,是内核提供给用户调用的函数。 2、 LINUX 环境下系统调用和库函数的异同 ⑴C 程序使用系统调用的语句和调用库函数的语句形式完全相同, 但是 二者运行的环境和运行机制截然不同。 ⑵从运行环境来看, 库函数使用依赖于所运行的用户环境, 程序调用库 函数时,它运行的目标代码是属于程序的,程序处于“用户态”执行; 而系统调用的使用不依赖于它运行的用户环境,是 LINUX 内核提供
的低层服务,系统调用时所执行的代码是属于内核的,程序处于“核 心态”执行。 ⑶程序库函数的调用最终还是要通过 LINUX 系统调用来实现,库函数 一般执行一条指令,该指令(操作系统陷阱 operating system trap) 将进程执行方式变为核心态,然后使内核为系统调用执行代码。
四、实验内容
本实验要求在 LINUX/UNIX 环境下用 C 语言编写三个具体的 SHELL 命令,基本涉及了 LINUX/UNIX 文件系统中较为常用的有关文件操作的系 统调用。内容如下: ⑴编程实现 copy 命令,执行格式:copy 个字节的空洞。 程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), creat(), close(), lseek() ⑵编程实现 renam (即 LINUX 下的 rename) 命令, 功能是实现文件的重命名。 执行格式:renam filea fileb; 其中 filea 为源文件,fileb 为目标文件。程序执行时应显示出命令行的 所有参数, 并给出重命名前后两个文件的大小、 索引节点号及最近一次状 态改变的时间。 程序可能涉及到的系统调用: read(), write(), open(), stat(), close(), link(), unlink() ⑶编程实现:从 A 文件某处(任意)读取 n 个字符(连续) ,写入 B 文件某 个位置。 执行格式:a.out A x n B y;
功能:将 file1、file2 两文件的内容合并拷入 file3 中,其中间应有 30
其中 a.out 为编译后的可执行程序; x 为 A 文件的任意位置; y 为 B 文件的任意位置; 程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), close(), lseek()
五、实验要求
1、做好实验预习,通过查找资料、阅读系统提供的帮助文件等多种渠道 了解本实验所使用的系统调用及各种技术方法。充分利用所学知识, 尽可能多地预设实现思路。 2、写出实验报告,内容是: 1 简要说明实验的目的、任务与设备。 2 写出实现的技术手段及关键代码。 3 总结设计中遇到的问题及解决方法。
4 写出实验心得与收获。 六、使用系统调用时的注意事项
以下列出了几条系统调用和库函数有关出错处理的不同点, 更多的内 容还需大家通过编程积累。 ⑴对于 studio 库中的函数,出错时会返回一个预定义的常量 EOF 或 NULL;许多库函数在出错时常常返回 0 或 –1 ;有些库函数则返回 某种出错代码。 ⑵系统调用的出错处理比较简单,每个系统调用在出错时都返回 –1 , 在调用成功时返回 0 (或某些其他具有特定意义的整数值)。 LINUX 系 统调用把出错代码放在一个名为 error 的外部变量中,在程序中包含 头文件 error.h,便可以得到 error 的错误代码。
感觉不错的话,微信扫一扫关注官方微信公众账号,以后找资料更方便
是互联网分享学习的开放平台,汇集亿份高价值的文档资料,涵盖档下载,程序开发文档,教育文档,医药文档,办公文档,考试文档,营销文档,工程文档,分享文档等行业。为您提供愉悦的分享学习体验。
Linux下的C语言编程
你可以免费下载该文档
南昌大学实验报告学生姓名: 倪焕
文档类型:DOC
下载次数:1896次
浏览次数:2777次
发布日期:
C语言图形方式下的编程学习目标·了解PC显示系统的结构·C语言图形初始化的一般方法·C语言常用的图形处理函数显示系统简介PC机显示系统一般是由显示器和显示卡组成。显示器(Monitor)是独立于主机的一种外部设备。显示卡(Adapter)
文档类型:DOC
下载次数:5683次
浏览次数:9932次
发布日期:
基础部份: 1.下列程序在32位linux或unix中的结果是什么?func(char *str){printf("%d",sizeof(str));printf("%d",strlen(
文档类型:DOC
下载次数:6402次
浏览次数:9864次
发布日期:
三、编程题1.输入一个半径值,分别计算圆周长、圆面积和球的体积。要求使用符号常量定义圆周率。#include&stdio.h&intmain(){printf(&计算圆周长面积求面积\n&);floatr,c,s,v;scanf(&quo...
文档类型:DOC
下载次数:967次
浏览次数:1916次
发布日期:
1、关键字if、while、for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式应紧贴括号。例如:while(1);2、双目运算符的两侧各插入一个空格分隔,单目运算符和操作数之间不加空格,例142如i=i+1、++i、!(i&1)、-x、&amp...
文档类型:DOC
下载次数:822次
浏览次数:2042次
发布日期:
通过调用自定义函数来完成求圆柱体的体积(v=3.14*r2*h),要求圆柱体的高和底半径在主函数中做输入,圆柱体的体积在主函数中做输出。#include&stdio.h&doublecylinder(doubler,doubleh);intmain(void...
文档类型:DOC
下载次数:798次
浏览次数:1426次
发布日期:
文档类型:DOC
下载次数:8862次
浏览次数:7381次
发布日期:
C语言图形编程(一、字符屏幕) 一、屏幕操作函数1. clrscr()清除字符窗口函数2. window()字符窗口函数3. gotoxy()光标定位函数4. clreol() 清除光标行尾字符函数5. insline() 插入空行函数6.
文档类型:DOC
下载次数:5901次
浏览次数:6660次
发布日期:
文档类型:DOC
下载次数:1081次
浏览次数:2971次
发布日期:
C语言编程试题 1. 给定程序program.c中,编写函数fun 的功能用选择排序法对数组的的数据按从小到大的顺序排列。 注意:请勿改动主函数mian和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。试题程序:#in
文档类型:DOC
下载次数:5072次
浏览次数:3659次
发布日期:
没满足你的要求? 查找更多相关内容

我要回帖

更多关于 电脑版好玩的社交软件 的文章

 

随机推荐