Linux上机报告.docx
- 文档编号:11473022
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:34
- 大小:1.98MB
Linux上机报告.docx
《Linux上机报告.docx》由会员分享,可在线阅读,更多相关《Linux上机报告.docx(34页珍藏版)》请在冰豆网上搜索。
Linux上机报告
昆明理工大学信息工程与自动化学院学生实验报告
(2015—2016学年第二学期)
课程名称:
Linux操作系统及程序设计
开课实验室:
信自楼2342016年6月15日
年级、专业、班
计科131
学号
201310405104
姓名
刘文俊
成绩
实验项目名称
《Linux操作系统及程序设计》
指导教师
欧阳鑫
教
师
评
语
该同学是否了解设计原理:
A.了解□ B.基本了解□ C.不了解□
该同学的上机能力:
A.强 □B.中等□C.差□
该同学的上机是否达到要求:
A.达到□ B.基本达到□ C.未达到□
上机报告是否规范:
A.规范□ B.基本规范□ C.不规范□
上机过程是否详细记录:
A.详细□ B.一般□ C.没有□注:
5个A为优4个A为良3个A为及格其余为不及格。
教师签名:
年月日
目录
上机一:
Linux及开发环境安装……………………………………………..…2页
上机二:
Linux的文件及目录操作1…………………….……………………….8页
上机三:
Linux的文件及目录操作2…………………………………………..12页
上机四:
Linux进程及网络开发1…………….….……………………………..17页
上机五:
Linux进程及网络开发2……………………….………………………21页
上机一:
Linux及开发环境安装
一、实验目的及要求
安装虚拟机,并在虚拟机上安装ubuntu系统
二、实验环境和相关软件及版本
Windows7、VMware、ubuntu-gnome-14.04-desktop-i386.iso
三、实验内容及步骤(包括程序设计框图)
1、创建新的虚拟机,选择ubuntu的映像文件
2、设置Linux用户名、密码
3、自定义硬件的安装
4、安装成功并登陆系统
四、实验结果、分析和结论
本次实验,我成功的安装了Linux系统,在安装过程中需要个虚拟机划分存储空间,我们一定要确定好虚拟机所需要的空间,不能太过小。
自定义安装硬件的时候可以将一些不别要的硬件设备删除掉,这样可以节约一些空间。
在虚拟机上安装的Linux系统我便可以进行Linux系统下的操作。
上机二:
Linux的文件及目录操作1
一、实验目的及要求
掌握文件及目录操作的基本命令,并在虚拟机上启动命令行加以实现。
二、实验环境和相关软件及版本
Windows7、VMware、ubuntu
三、实验内容及步骤(包括程序设计框图)
1、用ls命令显示当前目录下的文件
2、用mkdir创建一个目录文件
3、用rmdir删除一个目录文件
4、用ls–l命令显示当前目录下的文件的文件属性
5、用mv命令改变文件名
6、用chmod命令改变文件属性(改为可执行文件)
7、用cp命令复制文件
8、用gzip命令压缩文件成.gz文件
9、用gzip–dv命令解压文件
四、实验结果、分析和结论
本次实验,我初步掌握了文件及目录的创建删除、文件的复制、文件的编辑、文件的重命名、文件的属性显示、文件的属性改变、压缩文件等基本命令,这也是我第一次在Linux系统下使用命令,命令的使用方法多。
但是都是固定的,所以一定要多多熟悉更多的命令,常用的命令可以熟记。
上机三:
Linux的文件及目录操作2
一、实验目的及要求
利用系统调用和标准函数库对文件和目录进行操作。
二、实验环境和相关软件及版本
Windows7、VMware、ubuntu
三、实验内容及步骤(包括程序设计框图)
1、底层文件访问
1.1write系统调用
1.1.1编写write.c文件
1.1.2编译write.c文件并运行
1.2read系统调用
1.2.1编写read.c文件
1.2.2编译read.c文件并运行查看test.txt文件
1.3open系统调用
1.4close系统调用
1.5对open、read、write、close系统调用的综合应用——复制文件
1.5.1编写copy_system.c文件
1.5.2编译copy_system.c文件并运行
1.5.3查看源文件“file.in”和复制的文件“file.out”
2.标准I/O库
2.1fopen函数的调用,其原型如下:
#include
FILE*fopen(constchar*filename,constchar*mode);
2.2fclose函数的调用,其原型如下:
#include
intfclose(FILE*stream);
2.3fgetc函数的调用,其函数原型如下:
#include
intfgetc(FILE*stream);
2.4fputc函数的调用,其函数原型如下:
#include
intfputc(intc,FILE*stream);
2.5对fopen、fclose、fgetc、fputc函数的综合应用,复制文件
2.5.1编写copy_system2.c
2.5.2编译copy_system2.c并运行
四、实验结果、分析和结论
通过本次实验,我掌握了系统调用对文件的操作以及利用标准的I/O库来操作文件,底层文件的访问及库函数的调用,是学Linux以来第一次遇到的难题,很多函数库的用法,以及深层次的文件目录操作都不太熟悉。
希望在以后的学习中慢慢掌握。
上机四:
Linux进程及网络开发1
一、实验目的及要求
利用ForkThread等系统调用进行网络开发
二、实验环境和相关软件及版本
VMware
三、实验内容及步骤(包括程序设计框图)
程序1:
fork进程控制
include
main()
{
intp1,p2,i;
if(p1=fork())
for(i=0;i<500;i++)
printf("child%d\n",i);
else
{
if(p2=fork())
for(i=0;i<500;i++)
printf("son%d\n",i);
}
}
程序2:
include
#include
intmain()
{
pid_tfpid;
//printf("fork!
");
printf("fork!
/n");
fpid=fork();
if(fpid<0)
printf("errorinfork1");
elseif(fpid==0)
printf("Iamthechildprocess,myprocessidis%d/n",getpid());
else
printf("Iamtheparentprocess,myprocessidis%d/n",getpid());
return0;
}
~
4、实验结果、分析和结论
程序1:
fork进程控制
程序2
上机五:
Linux进程及网络开发2
一、实验目的及要求
开发一个Linux命令行基于C/S结构的TCP/IP的即时聊天程序
二、实验环境和相关软件及版本
Windows7、VMware、ubuntu
三、实验内容及步骤(包括程序设计框图)
1、客户端设计流程:
2、服务端设计流程:
3、编写服务端收发消息程序server.c:
#include
#include
#include
#include
#include
sockaddr_in
#include
#include
#include
#include
#include
#include
#include
#include
#define PERM S_IRUSR|S_IWUSR
#define MYPORT 3490 //宏定义定义通信端口
#define BACKLOG 10 //宏定义,定义服务程序可以连接的最大客户数量
#define WELCOME "|----------Welcome to the chat room!
----------|" //宏定义,当客户端连接服务端时,想客户发送此欢迎字符串
//转换函数,将int类型转换成char *类型
void itoa(int i,char*string)
{
int power,j;
j=i;
for(power=1;j>=10;j/=10)
power*=10;
for(;power>0;power/=10)
{
*string++='0'+i/power;
i%=power;
}
*string='\0';
}
//得到当前系统时间
void get_cur_time(char * time_str)
{
time_t timep;
struct tm *p_curtime;
char *time_tmp;
time_tmp=(char *)malloc
(2);
memset(time_tmp,0,2);
memset(time_str,0,20);
time(&timep);
p_curtime = localtime(&timep);
strcat(time_str," (");
itoa(p_curtime->tm_hour,time_tmp);
strcat(time_str,time_tmp);
strcat(time_str,":
");
itoa(p_curtime->tm_min,time_tmp);
strcat(time_str,time_tmp);
strcat(time_str,":
");
itoa(p_curtime->tm_sec,time_tmp);
strcat(time_str,time_tmp);
strcat(time_str,")");
free(time_tmp);
}
//创建共享存储区
key_t shm_create()
{
key_t shmid;
//shmid = shmget(IPC_PRIVATE,1024,PERM);
if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1)
{
fprintf(stderr,"Create Share Memory Error:
%s\n\a",strerror(errno));
exit
(1);
}
return shmid;
}
//端口绑定函数,创建套接字,并绑定到指定端口
int bindPort(unsigned short int port)
{
int sockfd;
struct sockaddr_in my_addr;
sockfd = socket(AF_INET,SOCK_STREAM,0);//创建基于流套接字
my_addr.sin_family = AF_INET;//IPv4协议族
my_addr.sin_port = htons(port);//端口转换
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),0);
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit
(1);
}
printf("bing success!
\n");
return sockfd;
}
int main(int argc, char *argv[])
{
int sockfd,clientfd,sin_size,recvbytes; //定义监听套接字、客户套接字
pid_t pid,ppid; //定义父子线程标记变量
char *buf, *r_addr, *w_addr, *temp, *time_str;//="\0"; //定义临时存储区
struct sockaddr_in their_addr; //定义地址结构
key_t shmid;
shmid = shm_create(); //创建共享存储区
temp = (char *)malloc(255);
time_str=(char *)malloc(20);
sockfd = bindPort(MYPORT);//绑定端口
while
(1)
{
if(listen(sockfd,BACKLOG) == -1)//在指定端口上监听
{
perror("listen");
exit
(1);
}
printf("listening......\n");
if((clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) ==
-1)//接收客户端连接
{
perror("accept");
exit
(1);
}
printf("accept from:
%d\n",inet_ntoa(their_addr.sin_addr));
send(clientfd,WELCOME,strlen(WELCOME),0);//发送问候信息
buf = (char *)malloc(255);
ppid = fork();//创建子进程
if(ppid == 0)
{
//printf("ppid=0\n");
pid = fork(); //创建子进程
while
(1)
{
if(pid > 0)
{//父进程用于接收信息
memset(buf,0,255);
//printf("recv\n");
//sleep
(1);
if((recvbytes = recv(clientfd,buf,255,0)) <= 0)
{
perror("recv1");
close(clientfd);
raise(SIGKILL);
exit
(1);
}
//write buf's data to share memory
w_addr = shmat(shmid, 0, 0);
memset(w_addr, '\0', 1024);
strncpy(w_addr, buf, 1024);
get_cur_time(time_str);
strcat(buf,time_str);
printf(" %s\n",buf);
}
else if(pid == 0)
{
//子进程用于发送信息
//scanf("%s",buf);
sleep
(1);
r_addr = shmat(shmid, 0, 0);
//printf("---%s\n",r_addr);
//printf("cmp:
%d\n",strcmp(temp,r_addr));
if(strcmp(temp,r_addr) !
= 0)
{
strcpy(temp,r_addr);
get_cur_time(time_str);
strcat(r_addr,time_str);
//printf("discriptor:
%d\n",clientfd);
//if(send(clientfd,buf,strlen(buf),0) == -1)
if(send(clientfd,r_addr,strlen(r_addr),0) == -1)
{
perror("send");
}
memset(r_addr, '\0', 1024);
strcpy(r_addr,temp);
}
}
else
perror("fork");
}
}
}
printf("------------------------------\n");
free(buf);
close(sockfd);
close(clientfd);
return 0;
}
4、编写客户端收发消息程序client.c
#include
#include
sockaddr_in
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
struct sockaddr_in clientaddr;//定义地址结构
pid_t pid;
int clientfd,sendbytes,recvbytes;//定义客户端套接字
struct hostent *host;
char *buf,*buf_r;
if(argc < 4)
{
printf("usage:
\n");
printf("%s host port name\n",argv[0]);
exit
(1);
}
host = gethostbyname(argv[1]);
if((clientfd = socket(AF_INET,SOCK_STREAM,0)) == -1) //
创建客户端套接字
{
perror("socket\n");
exit
(1);
}
//绑定客户端套接字
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons((uint16_t)atoi(argv[2]));
clientaddr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(clientaddr.sin_zero),0);
if(connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) == -1) //连接服务端
{
perror("connect\n");
exit
(1);
}
buf=(char *)malloc(120);
memset(buf,0,120);
buf_r=(char *)malloc(100);
if( recv(clientfd,buf,100,0) == -1)
{
perror("recv:
");
exit
(1);
}
printf("\n%s\n",buf);
pid = fork();//创建子进程
while
(1)
{
if(pid > 0){ //父进程用于发送信息
//get_cur_time(time_str);
strcpy(buf,argv[3]);
strcat(buf,":
");
memset(buf_r,0,100);
//gets(buf_r);
fgets(buf_r,100,stdin);
strncat(buf,buf_r,strlen(buf_r)-1);
//strcat(buf,time_str);
//printf("---%s\n",bu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 上机 报告