当前位置:文档之家› 太原理工大学Linux实验报告

太原理工大学Linux实验报告

“下一步”(11)选择虚拟硬盘容量,若硬盘空间较大可适当增加其值,然后点击“下一步”,根据提示完成操作,并返回虚拟机主界面(12)在虚拟机主界面点击如图所示的图标,编辑虚拟机设置(13)选择系统安装文件(ISO)的位置(14)在虚拟机主界面启动虚拟机六、实验结果与分析完成了安装 VMware Workstation,并汉化,在 VMware Workstation当中创建一个新的虚拟机,指定安装包的路径,安装定制 Redhat Enterprise Linux 5.0。

七、讨论、心得本实验通过对 Linux 操作系统的定制安装,建立对 Linux操作系统的初步认识,为后续实验的进行提供基础平台,掌握了 Linux操作系统的虚拟机定制安装,熟悉了Linux文件目录的结构,在实验中遇到了一些问题,但是通过网上搜索和同学帮助最终还是完成了。

对应的实验结果如下(截图):1.在运行了1.sh这个脚本之后,会执行脚本中的命令。

2.在运行之后,输入的内容会被2.sh脚本读入并以命令的形式输出struct sockaddr_in client_addr;bzero(&client_addr,sizeof(client_addr)); //把一段内存区的内容全部设置为0 client_addr.sin_family = AF_INET; //internet协议族client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址client_addr.sin_port = htons(0); //0表示让系统自动分配一个空闲端口 //创建用于internet的流协议(TCP)socket,用client_socket代表客户机socket int client_socket = socket(AF_INET,SOCK_STREAM,0);if( client_socket < 0){printf("Create Socket Failed!/n");exit(1);}//把客户机的socket和客户机的socket地址结构联系起来if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr))){printf("Client Bind Port Failed!/n");exit(1);}//设置一个socket地址结构server_addr,代表服务器的internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;if(inet_aton(server_IP,&server_addr.sin_addr) == 0) //服务器的IP地址来自程序的参数{printf("Server IP Address Error!/n");exit(1);}server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);socklen_t server_addr_length = sizeof(server_addr);//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0){printf("Can Not Connect To %s!/n",server_IP);exit(1);}char buffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);//从服务器接收数据到buffer中int length = recv(client_socket,buffer,BUFFER_SIZE,0);if(length < 0){printf("Recieve Data From Server %s Failed!/n", server_IP);exit(1);}printf("From Server %s :/t%s",server_IP,buffer);bzero(buffer,BUFFER_SIZE);sprintf(buffer,"Hello, World! From Client Thread NUM :/t%d/n",(int)thread_num);//向服务器发送buffer中的数据send(client_socket,buffer,BUFFER_SIZE,0);//关闭socketclose(client_socket);pthread_exit(NULL);}int main(int argc, char **argv){if (argc != 2){printf("Usage: ./%s ServerIPAddress/n",argv[0]);exit(1);}server_IP = argv[1];pthread_t child_thread;pthread_attr_t child_thread_attr;pthread_attr_init(&child_thread_attr);pthread_attr_setdetachstate(&child_thread_attr,PTHREAD_CREATE_DETACHED);int i=0;for(i=0; i<10000; i++){if( pthread_create(&child_thread,&child_thread_attr,talk_to_server,(void *)i) < 0 )printf("pthread_create Failed : %s/n",strerror(errno));}return 0;}2.线程并发服务器端#include <netinet/in.h> // for sockaddr_in#include <sys/types.h> // for socket#include <sys/socket.h> // for socket#include <stdio.h> // for printf#include <stdlib.h> // for exit#include <string.h> // for bzero#include <pthread.h>#include <sys/errno.h> // for errno#define HELLO_WORLD_SERVER_PORT 6666#define LENGTH_OF_LISTEN_QUEUE 20#define BUFFER_SIZE 1024#define THREAD_MAX 5void * talk_to_client(void *data){int new_server_socket = (int)data;char buffer[BUFFER_SIZE];bzero(buffer, BUFFER_SIZE);strcpy(buffer,"Hello,World! 从服务器来!");strcat(buffer,"/n"); //C语言字符串连接//发送buffer中的字符串到new_server_socket,实际是给客户端send(new_server_socket,buffer,BUFFER_SIZE,0);bzero(buffer,BUFFER_SIZE);//接收客户端发送来的信息到buffer中int length = recv(new_server_socket,buffer,BUFFER_SIZE,0);if (length < 0){printf("Server Recieve Data Failed!/n");exit(1);}printf("/nSocket Num: %d /t %s",new_server_socket, buffer);//关闭与客户端的连接close(new_server_socket);pthread_exit(NULL);}int main(int argc, char **argv){//设置一个socket地址结构server_addr,代表服务器internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0 server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htons(INADDR_ANY);server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket int server_socket = socket(AF_INET,SOCK_STREAM,0);if( server_socket < 0){printf("Create Socket Failed!");exit(1);}//把socket和socket地址结构联系起来if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))) {printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);exit(1);}//server_socket用于监听if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ){printf("Server Listen Failed!");exit(1);}int i;while(1) //服务器端要一直运行{//定义客户端的socket地址结构client_addrstruct sockaddr_in client_addr;socklen_t length = sizeof(client_addr);//接受一个到server_socket代表的socket的一个连接//如果没有连接请求,就等待到有连接请求--这是accept函数的特性//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信//new_server_socket代表了服务器和客户端之间的一个通信通道//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);if ( new_server_socket < 0){printf("Server Accept Failed!/n");break;}pthread_t child_thread;pthread_attr_t child_thread_attr;pthread_attr_init(&child_thread_attr);pthread_attr_setdetachstate(&child_thread_attr,PTHREAD_CREATE_DET ACHED);if( pthread_create(&child_thread,&child_thread_attr,talk_to_clien t, (void *)new_server_socket) < 0 )printf("pthread_create Failed : %s/n",strerror(errno));}//关闭监听用的socketclose(server_socket);return 0;}上图就是一个通过多线程来完成数据的传输,由于写的是死循环,所以一直继续运行下去,Ctrl+C可退出服务1.搭建Samba服务器(1)配置Samba服务 netstat(查看网络状态) ping(测试网络连通性) ifconfig(查看或配置网卡信息) setup(系统重启后网卡才能生效)(2)安装Samba软件包(在挂载的光盘的Sever目录中)先安装samba-common-3.0.25b-0.e15.4.i386.rpm# rpm - ivh samba-common-3.0.25b-0.e15.4.i386.rpm再安装samba-client-3.0.25b-0.e15.4.i386.rpm#rpm -ivh samba-client-3.0.25b-0.e15.4.i386.rpm最后安装samba-3.0.25b-0.e15.4.i386.rpm# rpm -ivh samba-3.0.25b-0.e15.4.i386.rpm(3)添加Samba用户创建一个admin系统用户# useradd admin # passwd admin修改samba用户密码# smbpasswd - a admin重启samba服务器# service smb restart2.搭建TFTP服务器(1)安装TFTP服务器# rpm –ivh xinetd-2.3.14-10.el5.i386.rpm# rpm -ivh tftp-server-0.42-3.1.i386.rpm# rpm –ivh tftp-0.42-3.1.i386.rpm(2)建立tftp的主工作目录# mkdir /tftpboot(3)修改tftp配置文件# vi /etc/xinetd.d/tftpservice tftp {disable socket_type protocol wait server user server server_args ……} 修改tftp配置文件= no = dgram = udp = yes = root = /usr/sbin/in.tftpd = -s / tftpboot // 此时即可启动tftp服务器(4)重启TFTP服务器# /etc/init.d/xinetd restart3.安装NFS服务器# rpm -ivh nfs-utils-1.0.9-24.e15.i386.rpm配置NFS# vi /etc/exports 加入允许被其它计算机访问的目录和访问权限启动NFS服务器:# /etc/init.d/nfs start使用mount 命令挂载NFS 服务器上的共享目录# mount -t nfs servername:/shared_dir /localdir4.搭建Linux交叉开发环境(1)安装交叉编译工具# tar xvzf arm-linux-xxxx.tgz -C /(2)安装完交叉编译器后,为了方便使用需要修改环境变量:# export PATH=/usr/local/arm//xxxx/bin:$PATH(3)在Windows/linux中编写源程序(4)在Linux中编译程序:# arm-linux-gcc hello.c –o hello1.连接好开发板2.在虚拟机中写好程序,利用arm-linux交叉编译器gcc编译生成可3.通过TFTP将可执行文件复制到开发板上4.在开发板中运行可执行文件。

相关主题