系统软件课程设计报告
printf("the correct answer rate is %0.2f\n",f*100);
exit(0);
}
Makefile文件
main:main.o input.o chuti.o
gcc main.o input.o chuti.o -o main
main.o:main.c myhead.h
#include <stdio.h>
static int THE_TRUE_ANSWER_NUMBER = 0;
int main(int argc,char *argv[])
{
int i;
int j;
int k;
int q1;
int q2;
srand((unsigned)time(NULL));
printf("please input the number of questions: ");
再打开一个终端,用ps查看原进程和新创建进程的进程号(PID)。
可以看到,在新进程创建后,原来的进程已经终止了。
在用execve函数创建新进程后,会以新的程序取代原来的进程,然后系统会从新进程运行,但是新进程的PID值会与原来进程的PID值相同。一般情况下,在运行execve函数后是不会返回原进程的,只有在错误时才会返回-1,所以在原进程中的execve函数下方,加入perror函数,输出错误信息,并返回1,表示有错误发生。
#include <stdio.h>
int question(int questionNum)
{
int i;
int k;
int q1;
int q2;
int THE_TRUE_ANSWER_NUMBER=0;
srand((unsigned)time(NULL));
for(i=0;i<questionNum;i++){
gcc -c main.c
input.o:main.c
gcc -c input.c
chuti.o:main.c
gcc -c chuti.c
2.文件操作
2.1课程题目要求
设计一个程序,要求利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。
2.2实现
#include<sys/types.h>
scanf("%d",&j);
for(i=0;i<j;i++){
q1 = rand()%10;
q2 = rand()%10;
printf("%d+%d=",q1,q2);
scanf("%d",&k);
if(k==q1+q2){
THE_TRUE_ANSWER_NUMBER+=1;
}
}
float f = THE_TRUE_ANSWER_NUMBER/(j*1.0);
2、设计一个程序,要求利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。
3、设计一个程序,程序在运行时,能执行vim程序,即创建一个新的进程,并用ps命令查看程序的进程号与vim的进程号。(难度系数:1)
4.设计的主要任务
认真写文档,熟悉linux下的操作,掌握linux的基本知识及常用的操作命令,运用linux的基本知识及常用的操作命令来解决问题的能力。
printf("系统分配的进程号(PID)是:%d\n",gitpid());/*显示输入进程号*/
if(execve("/usr/bin/vim",args,NULL)<0)/*调用vim程序,创建新进程*/
perror("用execve创建进程出错");
return 1;
}
3.4分析
编译、运行程序,系统会出现运行结果,先显示Linux系统分配的进程号(PID),接着运行vim程序,创建新的进程。
printf(“%s”,buffer);
}
3.进程控制
3.1进程简介
进程是一个程序的一次执行的过程。
在Linux环境下,每个正在运行的程序都称为进程。
每个进程包含进程标识符及数据,这些数据包含进程变量、外部变量及进程堆栈等。
3.1.1进程与程序
由于一个进程对应一个程序的执行,但进程不等同于程序。因为程序是静态的概念,进程是动态的概念。
(1)手工启动又可分为前台启动和后台启动。
前台启动:是手工启动一个进程的最常用方式。一般地,当用户输入一个命令时,就已经启动了一个进程,并且是一个前台的进程。
后台启动:往往是在该进程非常耗时,且用户也不急着需要结果的时候启动。一般地,当用户输入一个命令结尾加上一个“&”号,就是后台启动一个进程。
(2)调度启动
1.3课程题目要求
制作一个可供小学数学运算的程序:10以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。例如:请输入题数:2
1+5=
2+4=
由用户输入答案,程序根据答案判断正误,输出正确率(%)。并用make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。(难度系数:2)
1.1 makefile主要功能
Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile文件是许多编译器--包括Windows NT下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改makefile文件而已。
#include <ctype.h>
#include "myhead.h"
int main(int argc,char *argv[])
{
int i;
int k;
int j = input();
int correctNum = question(j);
float f = correctNum/(j*1.0);
在Linux中最主要的进程标识有进程号(PID)和它的父进程号(PPID)。
1PID惟一地标识一个进程。
2PID和PPID都是非零的正整数。
3在Linux中获得当前进程的PID和PPID的系统调用函数为getpid和getppid函数。
3.2课程题目要求
设计一个程序,程序在运行时,能执行vim程序,即创建一个新的进程,并用ps命令查看程序的进程号与vim的进程号。(难度系数:1)
进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程。进程是程序执行和资源管理的最小单位。
对系统而言,当用户在各级系统中键入命令执行一个程序的时候,它将启动一个进程,因此,一个程序可以对应多个进程。
3.1.2Linux环境下的进程管理
Linux环境下的进程管理包括启动进程和调度进程。
启动进程有两种主要途径:手工启动和调度启动。
#include<sys/stat.h>
#include<fcntl.h>
main()
{Байду номын сангаас
int fd,size;
char buffer[80];
fd=open("/etc/passwd",O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
close(fd);
北京化工大学北方学院
课程设计报告
课程名称系统软件课程设计
设计题目linux下的c语言设计
专业、班级
学号
姓名
指导教师
设计时间
年月日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
1.设计目的
《Linux/Unix操作系统》课程设计是在完成理论课程学习之后安排的综合实践训练,通过几周的综合课程设计,在学生掌握Linux的基本知识及常用的操作命令基础上,提高学生对所学知识的应用能力,特别是:煅炼学生搜集有关Linux资料,在资料文档的帮助下,运用Linux的基本知识及常用的操作命令来解决问题的能力。
二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)
1.makefile文件介绍
Makefile文件Makefile一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
有时系统需要进行一些比较费时而且占用资源的维护工作,并且这些工作适合在深夜无人职守的时候进行,这时用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统就会自动完成这一切工作。
调度进程包括对进程的中断操作、改变优先级、查看进程状态等。
Linux环境下在进程启动时,系统会分配一个唯一的数值给每个进程,这个数值就称为进程标识符。
1、制作一个可供小学数学运算的程序:10以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。例如:请输入题数:2
1+5=
2+4=
由用户输入答案,程序根据答案判断正误,输出正确率(%)。并用make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。(难度系数:2)