Linux程序设计Word格式.docx
- 文档编号:920138
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:26
- 大小:414.58KB
Linux程序设计Word格式.docx
《Linux程序设计Word格式.docx》由会员分享,可在线阅读,更多相关《Linux程序设计Word格式.docx(26页珍藏版)》请在冰点文库上搜索。
一个对象以“{”(左括号)开始,“}”(右括号)结束。
每个“名称”后跟一个“:
”(冒号);
“‘名称/值’对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。
一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。
这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
一个字符(character)即一个单独的字符串(characterstring)。
字符串(string)与C或者Java的字符串非常相似。
VIM和Emacs是Linux下强大的编辑器,可用于程序编写。
GCC是Linux下最常用的C语言编译器。
3、实验内容
要求在Linux上使用VIM或者Emacs编辑器编写程序能够解析JSON数据,读出JSON数据中所包含的单词,并显示在屏幕上,其中测试用的JSON数据如下。
{
"
employees"
:
[
{"
firstName"
Bill"
"
lastName"
Gates"
},
George"
Bush"
Thomas"
Carter"
}
]
}
要求给出完整的源代码清单和运行结果,能够使用gdb调试程序。
4、实验基本步骤
1.编写main函数,在main函数中给出JSON数据;
2.设计、编写解析程序,读取并解析出单词;
3.将单词打印于屏幕;
4.使用GCC编译程序;
5.通过命令行输入程序名运行程序。
在c语言环境下有一个开源的cJSON库,其中封装好了一些列对json数据进行操作的函数。
#include<
stdio.h>
string.h>
stdlib.h>
#include"
cJSON.h"
intmain(void)
//先创建空对象
cJSON*json=cJSON_CreateObject();
//在对象上添加键值对
cJSON_AddStringToObject(json,"
country"
"
china"
);
//添加数组
cJSON*array=NULL;
cJSON_AddItemToObject(json,"
countries"
array=cJSON_CreateArray());
//在数组上添加对象
cJSON*obj=NULL;
cJSON_AddItemToArray(array,obj=cJSON_CreateObject());
cJSON_AddItemToObject(obj,"
Firstname"
cJSON_CreateString("
));
cJSON_AddStringToObject(obj,"
Lastname"
//清理工作
FILE*fp=fopen("
create.json"
w"
char*buf=cJSON_Print(json);
fwrite(buf,strlen(buf),1,fp);
fclose(fp);
cJSON_Delete(json);
return0;
五、实验总结
1.简述你所采用的解析算法。
预处理、编译、汇编、链接
2.解释你再GCC中所设置的编译选项的意义。
-E:
只进行预处理,不编译
-S:
只编译,不汇编
-c:
只编译、汇编,不链接
-g:
包含调试信息
-I:
指定include包含文件的搜索目录
-o:
输出成指定文件名
-v:
详细输出编译过程中所采用的每一个选项
-C:
预处理时保留注释信息
-ggdb:
在可执行文件中包含可供GDB使用的调试信息
3.在编辑器上,你更倾向于选择什么样的编辑器?
简述理由。
GCC
GCC不仅仅能支持C语言,还支持Ada语言、C++语言、Java语言、ObjectiveC语言,Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言。
GCC是一个交叉平台的编译器,目前支持几乎所有主流CPU处理器平台,它可以完成从C、C++、ObjectiveC等源文件向运行在特定cpu硬件上的目标代码的转换,GCC不仅功能非常强大,结构也异常灵活,便携性(protable)与跨平台支持(cross-plantform.support)特性是GCC的显著优点。
实验二文件编程
2、实验目的
4.熟练使用Linux的编译器gcc;
5.熟练掌握Linux上C程序的调试方法;
6.熟练掌握Linux上程序编辑器的使用;
7.熟练掌握Linux上相关文件的操作。
5、实验预习
Linux系统中的文件可以看作是数据流。
对文件进行操作之前,先调用标准I/O库函数fopen将数据流打开,之后,使用I/O操作函数和FILE类型的文件指针一起对数据流进行输入和输出的操作。
在对数据流操作完毕后,使用fclose函数将其关闭。
6、实验内容
设计一个考勤模拟程序,实现如下功能选择界面:
1.上班签到;
2.下班签出;
3.缺勤信息查阅。
考勤程序运行后,提示用户输入上述功能选择,并验证用户输入的用户名和密码;
用户信息保存在userinfo.dat中。
如果是上班签到,记录签到信息,如果签到时间大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat。
如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。
如果用户选择缺勤信息查询,则将check.dat中对应该用户的迟到早退信息查出并显示。
7、实验基本步骤
4.编写main函数,在main函数中给出测试数据,并负责用户迟到和早退信息的屏幕打印;
5.设计、编写用户信息记录模块,用于用户信息在userinfo.dat文件中的保存;
6.设计、编写用户出勤记录模块,用于缺勤信息在check.dat文件中的保存;
4.编写makefile文件,编译程序;
#include<
voidqiandao()
charid[128]={0};
charpw1[128]={0};
charpw2[128]={0};
printf("
请输入账号:
\n"
scanf("
%s"
id);
getchar();
请在输入密码:
pw1);
FILE*fp1=fopen("
./userinfo.dat"
r"
if(fp1==NULL)
{
printf("
nosuchfile!
return;
charbuf[128];
fgets(buf,sizeof(buf),fp1);
char*p=buf;
while(*p!
='
'
)
p++;
p++;
strncpy(pw2,p,strlen(p)-1);
fclose(fp1);
intday,hour,min;
if(strcmp(pw1,pw2)==0)
输入时间:
d-h-m\n"
scanf("
%d-%d-%d"
&
day,&
hour,&
min);
getchar();
if(hour>
8)
{
printf("
迟到!
FILE*fp=fopen("
./check.dat"
a"
fprintf(fp,"
id:
%s,%d-%d-%d迟到了\n"
id,day,hour,min);
fclose(fp);
}
else
正常打卡\n"
else
idorpwerror!
voidqianchu()
if(hour<
18)
早退!
%s,%d-%d-%d早退了\n"
正常签退\n"
voidchaxun()
FILE*fp2=fopen("
charc;
while
(1)
c=fgetc(fp2);
if(c==EOF)
break;
fputc(c,stdout);
fclose(fp2);
intmain(intargc,constchar*argv[])
1.上班签到;
2.下班签退;
3.缺勤信息查阅\n"
intc;
%d"
c);
switch(c)
case1:
欢迎签到!
qiandao();
break;
case2:
欢迎签退!
qianchu();
case3:
查询结果!
chaxun();
default:
errorinput"
欢迎注册!
!
请在输入一次:
pw2);
FILE*fp=fopen("
fprintf(fp,"
%s%s\n"
id,pw1);
fclose(fp);
error!
1.简述文件定位的作用和使用方法。
fseek函数是用来设定文件的当前读写位置:
函数原型:
intfseek(FILE*fp,longoffset,intorigin);
函数功能:
把fp的文件读写位置指针移到指定的位置.
fseek(fp,20,SEEK_SET);
是把fp文件读写位置指针从文件开始后移20个字节.
ftell函数是用来获取文件的当前读写位置;
longftell(FILE*fp)
得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.
ban=ftell(fp);
是获取fp指定的文件的当前读写位置,并将其值传给变量ban.
fseek函数与ftell函数综合应用:
可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.
2.总结I/O缓冲区的作用。
I/O提供缓存的目的是尽可能减少使用read和write调用的数量(系统调用比普通函数调用开销大)。
它也对每个I/O流自动地进行缓存管理,避免了应用程序需要考虑这一点所带来的麻烦。
标准I/O提供了三种类型的缓存:
(1)全缓存。
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。
对于驻在磁盘上的文件通常是由标准I/O库实施全缓存的。
(2)行缓存。
在这种情况下,当在输入和输出中遇到新行符时,标准I/O库执行I/O操作。
这允许我们一次输出一个字符(用标准I/Ofputc函数),但只有在写了一行之后才进行实际I/O操作。
(3)不带缓存。
标准I/O库不对字符进行缓存。
如果用标准I/O函数写若干字符到不带缓存的流中,则相当于用write系统调用函数将这些字符写至相关联的打开文件上。
3.总结文件相关操作。
打开和关闭文件,文件的读写操作,重定位流上的文件内部位置指针,文件访问标记。
实验三进程控制
3、实验目的
8.熟练使用Linux的编译器gcc;
9.熟练掌握Linux上C程序的调试方法;
10.熟练掌握Linux上程序编辑器的使用;
11.熟练掌握Linux上进程控制的操作。
8、实验预习
Linux是一个多用户、多任务的操作系统,它可以多个任务同时运行。
在Linux上开发程序时,程序员需要有效地管理进程。
常见的进程管理方式包括:
创建进程、获取进程信息、设置进程属性、执行进程、退出进程和跟踪进程等。
9、实验内容
编写一段程序,使得系统调用fork函数创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示“身份信息”:
父进程显示”Parentprocess!
PDI=****,PPID=*****”;
子进程显示”ChildProcess!
PID=****,PPID=****”。
多运行几次,观察记录屏幕上的显示结果,并分析原因。
10、实验基本步骤
7.编写main函数。
8.创建进程;
9.判断是否为子进程;
4.分别打印出进程号和父进程号;
5.退出进程。
unistd.h>
intmain()
pid_tpid1,pid2;
/*先创建一个子进程*/
pid1=fork();
if(pid1<
0){
/*pid1没创建子进程成功*/
failtofork.\n"
exit
(1);
}elseif(pid1==0){
Childprocess!
PID=:
%u\n,PPID=:
%u\n"
getpid(),getppid());
}else
Parentprocess!
%u\n,PPID=:
/*若是父进程,则再新创建其子进程*/
pid2=fork();
if(pid2<
0){
}elseif(pid2==0){
}else
Parentprosecc!
1.简述Linux中进程的几种状态。
R(TASK_RUNNING),可执行状态。
只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于可执行状态。
S(TASK_INTERRUPTIBLE),可中断的睡眠状态。
处于这个状态的进程因为等待某事件的发生(比如等待socket连接、等待信号量),而被挂起。
当这些事件发生时,对应的等待队列中的一个或多个进程将被唤醒。
一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态。
D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。
不可中断,指的是进程不响应异步信号,无法用kill命令关闭处于TASK_UNINTERRUPTIBLE状态的进程。
T(TASK_STOPPEDorTASK_TRACED),暂停状态或跟踪状态。
向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态(除非该进程本身处于TASK_UNINTERRUPTIBLE状态而不响应信号)。
当进程正在被跟踪时,它处于TASK_TRACED状态。
Z(TASK_DEAD-EXIT_ZOMBIE),退出状态。
进程在退出的过程中,处于TASK_DEAD状态,如果它的父进程没有收到SIGCHLD信号,故未调用wait(如wait4、waitid)处理函数等待子进程结束,又没有显式忽略该信号,它就一直保持EXIT_ZOMBIE状态。
只要父进程不退出,这个EX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 程序设计