Linux上机报告.docx

上传人:b****3 文档编号:5978297 上传时间:2023-05-09 格式:DOCX 页数:34 大小:1.98MB
下载 相关 举报
Linux上机报告.docx_第1页
第1页 / 共34页
Linux上机报告.docx_第2页
第2页 / 共34页
Linux上机报告.docx_第3页
第3页 / 共34页
Linux上机报告.docx_第4页
第4页 / 共34页
Linux上机报告.docx_第5页
第5页 / 共34页
Linux上机报告.docx_第6页
第6页 / 共34页
Linux上机报告.docx_第7页
第7页 / 共34页
Linux上机报告.docx_第8页
第8页 / 共34页
Linux上机报告.docx_第9页
第9页 / 共34页
Linux上机报告.docx_第10页
第10页 / 共34页
Linux上机报告.docx_第11页
第11页 / 共34页
Linux上机报告.docx_第12页
第12页 / 共34页
Linux上机报告.docx_第13页
第13页 / 共34页
Linux上机报告.docx_第14页
第14页 / 共34页
Linux上机报告.docx_第15页
第15页 / 共34页
Linux上机报告.docx_第16页
第16页 / 共34页
Linux上机报告.docx_第17页
第17页 / 共34页
Linux上机报告.docx_第18页
第18页 / 共34页
Linux上机报告.docx_第19页
第19页 / 共34页
Linux上机报告.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux上机报告.docx

《Linux上机报告.docx》由会员分享,可在线阅读,更多相关《Linux上机报告.docx(34页珍藏版)》请在冰点文库上搜索。

Linux上机报告.docx

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  //提供socket函数及数据结构

#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  //提供socket函数及数据结构 

#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模板 > 动物植物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2