实验七:Linux Socket编程 实验报告

实验七:Linux Socket编程 实验报告
实验七:Linux Socket编程 实验报告

《计算机操作系统》实验报告

实验七:Linux Socket编程

学校:╳╳╳

院系:╳╳╳

班级:╳╳╳

姓名:╳╳╳

学号:╳╳╳

指导教师:╳╳╳

目录

一、实验题目 (3)

二、实验学时 (3)

三、指导老师 (3)

四、实验日期 (3)

五、实验目的 (3)

六、实验原理 (3)

6.1 什么是Socket (3)

6.2 Socket建立 (3)

6.3 Socket配置 (4)

6.4 连接建立 (5)

6.5 数据传输 (6)

6.6 结束传输 (7)

七、实验步骤及结果 (7)

7.1 编译服务端(server.c) (7)

7.2 编译客户端(client.c) (8)

7.3 服务端与客户端交互 (8)

八、报告书写人 (9)

附录一服务端(server.c) (9)

附录二客户端(client.c) (11)

实验七:Linux Socket编程

一、实验题目

Linux Socket编程

二、实验学时

3学时

三、指导老师

╳╳╳

四、实验日期

2018年12月17日星期一

五、实验目的

(1)了解socket含义

(2)设计socket程序,实现远程服务器端和客户端的通信

六、实验原理

6.1 什么是Socket

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP 网络编程,必须理解Socket接口。

Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix 系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

6.2 Socket建立

为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:

int socket(int domain, int type, int protocol);

domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP 协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket 接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用

它。

Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。

两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

6.3 Socket配置

通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。

Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind函数原型为:

int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。

struct sockaddr结构类型是用来保存socket信息的:

struct sockaddr {

unsigned short sa_family; /* 地址族, AF_xxx */

char sa_data[14]; /* 14 字节的协议地址 */

};

sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。

另外还有一种结构类型:

struct sockaddr_in {

short int sin_family; /* 地址族 */

unsigned short int sin_port; /* 端口号 */

struct in_addr sin_addr; /* IP地址 */

unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */

};

这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。

使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:

my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */

my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */

通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。同样,通过将my_addr.sin_addr.s_addr置为INADDR_ANY,系统会自动填入本机IP地址。

注意在使用bind函数是需要将sin_port和sin_addr转换成为网络字节优先顺序;而sin_addr则不需要转换。

计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换,否则就会出现数据不一致。

下面是几个字节顺序转换函数:

·htonl():把32位值从主机字节序转换成网络字节序

·htons():把16位值从主机字节序转换成网络字节序

·ntohl():把32位值从网络字节序转换成主机字节序

·ntohs():把16位值从网络字节序转换成主机字节序

Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是保留端口号,你可以选择大于1024中的任何一个没有被占用的端口号。

6.4 连接建立

面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接,其函数原型为:

int connect(int sockfd, struct sockaddr *serv_addr,int addrlen); Sockfd是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是远端地址结构的长度。Connect函数在出现错误时返回-1,并且设置errno为相应的错误码。进行客户端程序设计无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候到打断口。

Connect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。

Listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。

int listen(int sockfd, int backlog);

Sockfd是Socket系统调用返回的socket 描述符;backlog指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept()它们(参考下文)。Backlog对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为20。如果一个服务请求到来时,输入队列已满,该socket将拒绝连接请求,客户将收到一个出错信息。

当出现错误时listen函数返回-1,并置相应的errno错误码。

accept()函数让服务器接收客户的连接请求。在建立好输入队列后,服务器

就调用accept函数,然后睡眠并等待客户的连接请求。

int accept(int sockfd, void *addr, int *addrlen);

sockfd是被监听的socket描述符,addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求服务的主机的信息(某台主机从某个端口发出该请求);addrten通常为一个指向值为sizeof(struct sockaddr_in)的整型指针变量。出现错误时accept函数返回-1并置相应的errno值。

首先,当accept函数监视的socket收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址联系起来,收到服务请求的初始socket仍可以继续在以前的 socket上监听,同时可以在新的socket描述符上进行数据传输操作。

6.5 数据传输

Send()和recv()这两个函数用于面向连接的socket上进行数据传输。

Send()函数原型为:

int send(int sockfd, const void *msg, int len, int flags);

Sockfd是你想用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Len是以字节为单位的数据的长度;flags一般情况下置为0(关于该参数的用法可参照man手册)。

Send()函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将send()的返回值与欲发送的字节数进行比较。当send()返回值与len不匹配时,应该对这种情况进行处理。

char *msg = "Hello!";

int len, bytes_sent;

……

len = strlen(msg);

bytes_sent = send(sockfd, msg,len,0);

……

recv()函数原型为:

int recv(int sockfd,void *buf,int len,unsigned int flags);

Sockfd是接受数据的socket描述符;buf 是存放接收数据的缓冲区;len 是缓冲的长度。Flags也被置为0。Recv()返回实际上接收的字节数,当出现错误时,返回-1并置相应的errno值。

Sendto()和recvfrom()用于在无连接的数据报socket方式下进行数据传输。由于本地socket并没有与远端机器建立连接,所以在发送数据时应指明目的地址。

sendto()函数原型为:

int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

该函数比send()函数多了两个参数,to表示目地机的IP地址和端口号信息,而tolen常常被赋值为sizeof (struct sockaddr)。Sendto 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。

Recvfrom()函数原型为:

int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct

sockaddr *from,int *fromlen);

from是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。fromlen常置为sizeof (struct sockaddr)。当recvfrom()返回时,fromlen 包含实际存入from中的数据字节数。Recvfrom()函数返回接收到的字节数或当出现错误时返回-1,并置相应的errno。

如果你对数据报socket调用了connect()函数时,你也可以利用send()和recv()进行数据传输,但该socket仍然是数据报socket,并且利用传输层的UDP 服务。但在发送或接收数据报时,内核会自动为之加上目地和源地址信息。

6.6 结束传输

当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:

close(sockfd);

你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。

int shutdown(int sockfd,int how);

Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式:

·0-------不允许继续接收数据

·1-------不允许继续发送数据

·2-------不允许继续发送和接收数据,均为允许则调用close ()

shutdown在操作成功时返回0,在出现错误时返回-1并置相应errno。

七、实验步骤及结果

7.1 编译服务端(server.c)

7.2 编译客户端(client.c)

7.3 服务端与客户端交互

八、报告书写人

╳╳╳

附录一服务端(server.c)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVER_PORT 10086

int main()

{

int serverSocket;

struct sockaddr_in server_addr;

struct sockaddr_in clientAddr;

int addr_len = sizeof(clientAddr);

int client;

char buffer[200];

int iDataNum;

if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

perror("socket");

return 1;

}

bzero(&server_addr, sizeof(server_addr));

server_addr.sin_family = AF_INET;

server_addr.sin_port = htons(SERVER_PORT);

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)

{

perror("connect");

return 1;

}

if(listen(serverSocket, 5) < 0)

{

perror("listen");

return 1;

}

while(1)

{

printf("监听端口: %d\n", SERVER_PORT);

client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);

if(client < 0)

{

perror("accept");

continue;

}

printf("等待消息...\n");

printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr));

printf("Port is %d\n", htons(clientAddr.sin_port));

while(1)

{

printf("读取消息:");

buffer[0] = '\0';

iDataNum = recv(client, buffer, 1024, 0); if(iDataNum < 0)

{

perror("recv null");

continue;

}

buffer[iDataNum] = '\0';

if(strcmp(buffer, "quit") == 0)

break;

printf("%s\n", buffer);

if(strcmp(buffer, "quit") == 0)

break;

}

}

close(serverSocket);

return 0;

}

附录二客户端(client.c)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVER_PORT 6666

int main()

{

int clientSocket;

struct sockaddr_in serverAddr;

char sendbuf[200];

char recvbuf[200];

int iDataNum;

if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

perror("socket");

return 1;

}

serverAddr.sin_family = AF_INET;

serverAddr.sin_port = htons(SERVER_PORT);

serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)

{

perror("connect");

return 1;

}

printf("连接到主机...\n");

while(1)

{

printf("发送消息:");

scanf("%s", sendbuf);

//printf("\n");

send(clientSocket, sendbuf, strlen(sendbuf), 0);

if(strcmp(sendbuf, "quit") == 0)

break;

}

close(clientSocket);

return 0;

}

LINUX实验报告

实验报告 ( 2014/ 2015 学年第一学期) 课程名称操作系统A 实验名称文件系统 实验时间2014 年12 月8 日指导单位计算机学院计算机科学与技术系 指导教师徐鹤 学生姓名王生荣班级学号B12040809 学院(系) 计算机学院专业软件工程

实验名称文件系统指导教师徐鹤 实验类型设计实验学时 2 实验时间2014.12.08 一、实验目的和要求 1. 学习LINUX系统下对文件进行操作的各种命令和图形化界面的使用方法。 2. 深入学习和掌握文件管理系统的基本原理和LINUX等操作系统下常用的系统调用,编写一个使用系统调用的例程。 3.实现一个文本文件的某信息的插入和删除 4.实现一个记录文件的某记录的插入和删除 二、实验环境(实验设备) Windows XP + VMWare + RedHat Linux 8

三、实验过程描述与结果分析 1. 目录/proc下与系统相关的文件和目录 (1) /proc/$pid/fd:这是一个目录,该进程($PID号码进程)每个打开的文件在该目录下有一个对应的文件。 例如:#ls /proc/851/fd 0 1 2 255 这表示,851号进程目前正在使用(已经打开的)文件有4个,它们的描述符分别是0、1、2、255。其中,0、1、2 依次分别是进程的标准输入、标准输出和标准错误输出设备。 (2)/proc/filesystems:该文件记录了可用的文件系统类型。 (3)/proc/mounts:该记录了当前被安装的文件系统信息 例如:#cat /proc/mount (4)/proc/$pid/maps:该文件记录了进程的映射内存区信息。 例如:#cat /proc/851/maps 2.常用命令讲解 ls 命令 用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如: $ ls -liah * 22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile

2《Linux基础》实验报告 基本配置Linux

实验序号: 2 《Linux基础》 实验报告 实验名称:基本配置Linux操作系统 姓名: 学院:计算机学院 专业: 班级: 学号: 指导教师: 实验地址:N6-113 实验日期:2017.3.7

说明 一.排版要求 1.实验报告“文件名”按模板要求填写。 2.一级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,四号字体,加粗。 3.二级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,小四号字体,加粗。 4.三级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,五号字体。 5.正文:每段缩进量:2个汉字。两端对齐;汉字用宋体,阿拉伯数字用 Times New Roman字体,五号字体。 6.图形要求 (1)在正文中要有引用。 (2)要有图名,图名位于图的下方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)图和图名“居中”。 7.表格要求 (1)在正文中要有引用。 (2)要有表名,表名位于表的上方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)表和表名“居中”。 二.注意事项 1.复制、拷贝、抄袭者取消成绩。 2.没有安实验报告排版要求者不及格。

实验2基本配置Linux操作系统实验 【实验目的】 1.。。。。 2.。。。。 3.。。。。 4.思考: (1)Linux默认的系统超级管理员帐户是什么? (2)Linux的操作系统引导器是什么?它有哪几种的操作界面? (3)RHEL的支持哪几种X-Window图形管理器?默认是使用哪一种?(4)RHEL支持哪几种Shell?默认是使用哪一种? 【实验原理】 1.。。。 。。。 2.。。。 。。。 (1)。。。 。。。 (2)。。。 。。。 3.。。 【实验环境】 1.实验配置 本实验所需的软硬件配置如表1所示。 表1 实验配置 本实验的环境如图1所示。

linux操作系统实验报告要点

LINUX操作系统实验报告 姓名 班级学号 指导教师 2011 年05月16 日 实验一在LINUX下获取帮助、Shell实用功能 实验目的: 1、掌握字符界面下关机及重启的命令。 2、掌握LINUX下获取帮助信息的命令:man、help。 3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替

换与别名,管道及输入输出重定向。 实验内容: 1、使用shutdown命令设定在30分钟之后关闭计算机。 2、使用命令“cat /etc/cron.daliy”设置为别名named,然后再取消别名。 3、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用追加重定向输入内容为word。 4、使用管道方式分页显示/var目录下的内容。 5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。 实验步骤及结果: 1.用shutdown命令安全关闭系统,先开机在图形界面中右击鼠标选中新建终端选项中输入 命令Shutdown -h 30 2、使用命令alias将/etc/cron.daliy文件设置为别名named,左边是要设置的名称右边是要更改的文件。查看目录下的内容,只要在终端输入命令即可。取消更改的名称用命令unalias 命令:在命令后输入要取消的名称,再输入名称。 3.输入命令将文件内容HELLO重定向创建文本文件/root/nn,然后用然后再使用追加重定向输入内容为word。步骤与输入内容HELLO一样,然后用命令显示文件的全部内容。 4.使用命令ls /etc显示/etc目录下的内容,命令是分页显示。“|”是管道符号,它可以将多个命令输出信息当作某个命令的输入。

linux实验报告

实验一 实验名称:Linux 基本命令的使用 实验时间:2学时 实验目的:熟练使用Linux字符界面、窗口系统的常用命令。 实验内容 (一)Linux操作基础 1.重新启动linux或关机(poweroff,shutdown,reboot,init 0,init 6) 2.显示系统信息(uname),显示系统日期与时间,查看2014年日历(date,cal) ①uname:查看系统与内核相关信息 uname -asrmpi 参数: -a :所有系统相关的信息; -s: 系统内核名称; -r: 内核的版本; -m:本系统的硬件名称,如i686或x86_64; -p: CPU的类型,与-m类似,只是显示的是CPU的类型; -i :硬件的平台(ix86). ②date:显示日期的命令 ③cal:显示日历 单独cal:列出当前月份的日历 cal 2014:列出2014年的日历 cal 5 2014:列出2014年五月的目录 3.使用帮助命令(man,help) ①man:是manual(操作说明)的简写,是在线帮助系统 man后跟某个命令就会详细说明此命令,例如:man man就会详细说明man 这个命令的用法; ②help:也是帮助命令,一般会在命令后,例如:cd --help 就会列出cd命令的使用说明。 4.查看当前登陆用户列表(who),显示当前用户(whoami) ①who:显示目前已登录在系统上面的用户信息; ②whoami:查询当前系统账户 5.建立一个新用户mytest,设定密码(useradd,passwd) ①useradd mytest(建立新用户mytest);

Linux常用命令实验报告

实验二 姓名:陈辉龙学号:201407010201 班级:14计科(1)一.实验目的: 掌握Linux常见命令,为今后的实验打下良好的基础。 二.实验内容 1.新建用户为chenhuilong,配置密码为passwd: 2.切换到chenhuilong用户,并在/home/chenhuilong目录下新建文件夹dir: 3.在文件夹dir下新建文件hello(内容为"printf hello world!"),并将其拷贝至/home/user目录: 4.统计/home/user目录下文件的个数,包括子目录里的首字符为-的普通文件:

5.统计/home下目录的个数,包括子目录里的目录: 6.显示/home/user目录下名为hello的文件的行数、字数以及字符数(使用输入重定向): 7.将上步的结果输出重定向到名为cnt_hello的文件: 8.删除/home/user目录下的hello文件: 9.进入/home/user/dir文件夹,将hello文件属性变为-rwxrw-r--(使用符号标记方式),并为hello文件在/home/user目录下建立软链接,链接文件名为link_hello:

10.查看/home/user/dir/hello文件的详细信息: 11.切换至根目录下查找hello文件: 12.打包home/user/dir/hello文件,并进行压缩,然后再进行解压缩解包: 13.退出user用户,删除/home/user文件夹:

14.将文件夹/home的所有者改为user用户,并删除user用户: 三.实验总结: 本实验旨在熟悉Unix的常用命令,实验较简单,操作起来还算顺利,做了一遍感觉还不是很熟悉,因此做了两遍,第二遍就很得心顺手。通过这次实验,熟悉了一些常用的命令操作,为以后的学习打下坚实的基础,提高自己的动手能力。

实验一 Linux基本操作实验报告

实验一Linux基本操作 一.实验目的: 1. 二.实验环境: 虚拟机+Red Hat Enterprise Server 5.0 三.实验内容: 根据以下的文字提示,调用相应的命令来完成,记录相应的运行结果。一)用户和组基本操作 1.添加一个user01用户,家目录为/home/sub2,并设置密码 2.添加一个group1 组 3.将user01用户添加到group1组中 4.修改group1组名称为group2 5.修改user01的家目录为/home/user01 6.判断/etc/password这个目录是否包含user01这个用户 7.修改user01的shell为/bin/tcsh 8.添加一个group3组,把user01和root用户都添加到该组

https://www.360docs.net/doc/0718498903.html,er01用户从group2组切换到group3组 10.设置user01的密码在2012-5-20过期 11.把/home/user01目录所属的组修改为group3 12.删除user01帐号 13.查看内核版本号 二)进程管理 1.运行cat命令:vi test,输入若干字符如this is a example,挂起vi进程 2.显示当前所有作业 3.将vi进程调度到前台运行

4.将vi进程调度到后台并分别用kill/pkill/killall命令结束该该进程。 三)磁盘管理 1.通过fdisk 将为硬盘增加一个分区(主分区或者逻辑分区)。 2.并格式化ext3系统,

3.检测分区是否有坏道 4.检测分区的完整性 5.加载分区到/mnt目录(或者其他分区)下,并拷贝一些文件到该目录下 6.(选做)为test用户设置磁盘配额(软限制和硬限制参数自行设定) 7.退出/mnt目录后卸载该分区 8.用du查看/usr目录的大小

Linux实验报告

Linux实验 一、实验目的 1. 了解Linux基本使用方法; 2. 掌握Linux基本设置方式; 3. 掌握Linux基本操作命令使用。 二、内容要求 1. 了解进程管理、文件管理与内存管理 2.掌握系统设置文件与命令 3. 熟练使用系统操作与维护命令 4. 熟练使用系统操作与维护命令 三、实验原理 Linux 系统常用命令格式: command [option] [argument1] [argument2] ... 其中option以“-”开始,多个option可用一个“-”连起来,如 “ls-l -a”与“ls-la”的效果是一样的。根据命令的不同,参数 分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在 标准输出,而错误信息则显示在标准错误输出设备。可使用重定向功能对这 些设备进行重定向。如: ls –lh > a.txt 命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回 一个非零值(在shell中可用变量$?查看)。在shell script中可用此返 回值作为控制逻辑的一部分。 DSL命令操作: 帮助命令: man 获取相关命令的帮助信息 例如:man dir 可以获取关于dir的使用信息。 info 获取相关命令的详细使用方法 例如:info info 可以获取如何使用info的详细信息。 基本操作: echo 显示字符串 pwd 显示当前工作目录 ls 查看当前文件夹内容 ls -a 查看当前文件夹内容(包括隐藏项) ls -l 查看当前文件夹内容(详细) ls / 查看根目录内容 cd / 移动到根目录

pwd 显示当前工作目录 ls -al 查看根目录文件夹内容(详细情况并包括隐藏项) cd /home/dsl 回到“家”目录 pwd 显示当前工作目录 df -h 显示剩余磁盘空间,参数“-h”表示适合人读取(human readable) du -h 显示文件夹(及子文件夹)所占空间 mkdir fd0 在当前目录下创建目录fd0 touch a.txt 创建一个空文件a.txt ls / -lh > a.txt 利用重定向功能将根目录中的内容写入a.txt。 cat a.txt 显示a.txt内容 wc a.txt 显示a.txt的行数,字数与字节数 find / -name *conf 在根目录下(包括子目录)查找以conf结尾的文件 sudo mount /dev/fd0 fd0 将软盘镜像挂载到目录fd0上 cd fd0 进入软盘镜像所挂载的目录 ls -lh 查看软盘镜像中的文件 cd .. “..”表示进入上一层目录 gzip a.txt 使用gzip压缩a.txt ls -lh 查看当前文件夹 sudo cp a.txt.gz fd0/ 将a.txt复制到fd0目录下,即将其复制到软盘镜像中 sudo mv fd0/a.txt.gz ./ 将a.txt移动到当前目录下,“.”表示当前目录 sudo umount /dev/fd0 将软盘镜像卸载 ls fd0 显示fd0 目录内容 gzip -d a.txt.gz 解压缩a.txt.gz ls -lh 查看当前文件夹 权限管理: 假设当前处于/home/dsl 目录下,且有a.txt(文件)与fd0(目录),当前用户名为dsl。 sudo cat /etc/passwd 用户 sudo cat /etc/shadow 密码 sudo cat /etc/group 组 users 查看当前登录用户 sudo chmod -x fd0 更改文件夹权限 ls fd0 fd0不能被执行,则意味着无法打开! sudo chmod +x fd0 更改文件夹权限 ls fd0 fd0能被打开 sudo chown root fd0 更改目录fd0的所有者 ls -lh 注意看fd0目录的属性 sudo chown dsl:root fd0 更改目录fd0的所有者为dsl,所属组为root ls -lh 注意看fd0目录的属性 chmod a-r a.txt 现在a.txt不具有“读”权限,不能被读取

linux基础实验报告含代码

Linux基础实验

目录 实验一 (3) 实验二 (4) 实验三 (6) 实验四 (9) 实验五 (11) 实验六 (14) 实验七 (16)

实验一螺旋矩阵 一、实验目的 1.熟悉linux下c程序编写。 2.掌握Makefile编写方法。 二、实验环境和工具 Red Hat Linux 三、实验流程 1.编写螺旋矩阵程序 2.编写Makefile文件 四、实验结果 五、实验心得 通过这次实验,我熟悉了linux下c语言程序的编写,掌握了vi的一些常用操作,学会了使用gcc命令和makefile文件两种方法编译程序。同时也使我熟悉了linux里常用命令的使 用,还有,学会了挂载U盘的方法,可以很方便的往linux里传送文件。 六、关键代码 Makefile 文件 CC=gcc EXEC=juzhen OBJS=juzhen.o all:$(EXEC) $(EXEC):$(OBJS) $(CC) -o $@ $(OBJS) clean: -rm -f $(EXEC) $(OBJS)

实验二添加、删除用户 一、实验目的 1.设计一个shell程序,分组批量添加用户。 2.再设计一个批量删除用户的shell程序。 二、实验环境和工具 Red Hat Linux 三、实验流程 1.编写shell程序 2.修改文件权限 chmod +x addusers 3.运行脚本 四、实验结果 添加用户: 删除用户:

五、实验心得 通过本次实验,我了解了shell脚本编程的方法和其语法规则。掌握了使用shell脚本程序添加、删除用户的方法。需要注意的是:shell脚本直接用vi编写,要特别注意空格。 六、关键代码 添加用户: 删除用户:

Linux实验报告

燕山大学 Linux技术上机实验指导

实验一Linux系统安装与简单配置 一、实验目的 1.掌握Linux系统安装的分区准备。 2.掌握Linux系统的安装步骤。 3.掌握Linux系统分区的挂载和卸载。 4.掌握Linux系统的启动和关闭操作。 二、实验内容 1.安装VMware虚拟机,设置光盘驱动器,为Linux系统安装做准备。2.在虚拟机下安装Linux操作系统(如Ubuntu桌面版本)。 3.配置Linux系统运行环境。 4.利用空闲分区创建新的Linux系统分区。 5.将新的Linux系统分区挂载到系统中;卸载新挂载的分区,重新挂载到目录树中的其他位置。 三、主要的实验步骤 1.制定安装系统的分区计划。 2.配置光驱引导镜像文件iso,启动系统,开始安装过程。 3.根据安装计划,对磁盘空间进行分区设置。 4.根据系统安装指导,完成Linux系统的安装过程。 5.安装成功后,退出系统,重新启动虚拟机,登陆Linux操作系统。6.对Linux系统进行配置,如网络设备等。 7.利用磁盘使用工具和mount,将新创建的Linux系统分区挂载到系统中。将新挂载的分区卸载,并重新挂载到目录树的其他位置。

实验二Linux常用命令使用 一、实验目的 1.掌握Linux一般命令格式。 2.掌握有关文件和目录操作的常用命令。 3.熟练使用man命令。 二、实验内容 1.熟悉cd、date、pwd、cal、who、echo、clear、passwd等常用命令。2.在用户主目录下对文件进行操作:复制一个文件、显示文件内容、查找指定内容、排序、文件比较、文件删除等。 3.对目录进行管理:创建和删除子目录、改变和显示工作目录、列出和更改文件权限、链接文件等。 4.利用man命令显示date、echo等命令的手册页。 5.显示系统中的进程信息。 三、主要实验步骤 1.登陆进入系统,修改个人密码。 2.使用简单命令:date、cal、who、echo、clear等,了解Linux命令格式。

LINUX的FTP实验报告

LINUX的FTP实验报告 实验需求:为了实现文件传输,共享资源 实验环境:一台centos和一台XP客户机 实验步骤:首先打开centos再将安装光盘挂载上,输入命令“rpm -qa|grep vsftpd”查看是否有此软件,如果没有进入到光盘的挂载目录,然后输入命令“rpm -ivh vsftpd(然后使用补全)”,如图1所示,安装软件完成 图1 下面我们到配置文件中设置一下,输入命令“vi /etc/vsftpd/”就出现如图2所示,用末行模式加上行号

图2 我们将文件中的第27和31行启用,就是把前面的#删除即可,然后在31行下面写上“anon_other_write_enable=YES”这一行的意思是给匿名用户删除权限,第27行是给匿名用户上传权限,31行是给匿名用户创建、修改文件夹权限,如图3所示,修改完成后保存退出

图3 然后我们再到“/var/ftp/”下将pub文件夹的其它用户权限设为读、写、执行,输入命令“chmod o+w pub”如图4所示 图4 下面我们将两台虚拟机网段设置成3,将centos的IP设置为将XP的IP设置为如图5-1,5-2所示,都点击确定完成设置

图5-1

图5-2 然后我们在XP上测试一下网络是否畅通,如图6所示网络畅通 图6

下面我们到centos上启动FTP服务,输入命令“service vsftpd restart”, ,我们启动成功,下面我们到XP上测试,我们的设置是否生效,如图7所示,我们访问成功 图7 我们测试一下上传和删除功能,如图8-1,8-2所示,设置生效,我们实验成功

Linux 及其使用环境实验报告

计算机语言与程序设计上机实验报告 学号:姓名:所在系:班级: 实验名称:实验1 Linux 及其使用环境实验日期 实验指导教师实验机房及机号 ------------------------------------------------------------------------------------------------------ 1.实验目的 (1)1、了解UNIX的命令及使用格式。 (2)熟悉UNIX/LINUX的常用基本命令。。 2.实验内容 (1)熟悉UNIX/LINUX的常用基本命令如ls、who、w、pwd、ps、pstree、top 等。 (2)使用passwd命令,date命令,uname命令等显示机器及环境相关信息(3)使用whoami命令找到用户名。然后使用who -a命令来看看你的用户名和同一系统其他用户的列表 (4)使用目录相关命令熟悉目录操作,文件操作,掌握相对路径及绝对路径(5)学习后台命令运行 3. 实验步骤 (1)显示目录文件ls 命令:在**目录下,运行ls –la, 运行结果为 (1)显示目录文件ls 命令:在**目录下,运行ls –la,运行结果为

(2)pwd命令的使用,创建目录:mkdir命令: 结果为 (3)查看文件内容:cat命令;

(4)删除目录:rmdir命令 (5)显示目录内容:ls命令

(6)改变工作目录:cd命令 (7)删除文件:rm命令

(8)复制文件或目录:cp命令; (9)移动或更改文件,目录名称:mv命令

(10)查看系统中的使用者:who命令 (11)改变文件或目录的存取权限:chmod命令

Linux实验报告(2)

Linux 实验报告姓名 黄芳恺 班级软件工程114 学号119074258 指导教师阮越

目录 实验一 Linux基本命令的使用 实验二简单Shell程序设计 实验三 Linux下简单C程序设计与文件操作实验四 Linux下进程操作与进程间通信 实验五 Linux线程的使用 实验六 Linux进程间的IPC 实验七 Linux下访问Mysql数据库 实验八 Linux下网络编程 练习题: grep、 bash、生产者消费者

实验一 Linux基本命令的使用 1、实验目的 学习和掌握 Linux 的基本命令。 2、实验内容和步骤 步骤 1:以user_login用户身份并使用telnet登录Linux服务器,按照提示创建自己的账户和口令。 步骤 2 :使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。 步骤 3:使用 pwd 命令察看当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用 -a,-l,-F,-A,-lF等不同选项并比较不同之处。 -a do not ignore entries starting with -I, --ignore=PATTERN do not list implied entries matching shell PATTERN -l use a long listing format -F, --classify append indicator (one of */=>@|) to entries -A, --almost-all do not list implied . and .. -lF ignore file

实验四-同步与互斥-Linux实验报告

实验四-同步与互斥-Linux实验报告

实验四同步与互斥 【实验目的和要求】 1、掌握进程(线程)的同步与互斥。 2、掌握生产者消费者问题的实现方法。 3、掌握多线程编程方法。 【实验内容】 实现生产者消费者问题 1、有一个仓库,生产者负责生产产品,并放入仓库,消费者会从仓库中拿走产品(消费)。 2、仓库中每次只能入一个(生产者或消费者)。 3、仓库中可存放产品的数量最多10个,当仓库放满时,生产者不能再放入产品。 4、当仓库空时,消费者不能从中取出产品。 5、生产、消费速度不同。 【实验原理】 1、信号量mutex提供对缓冲池访问的互斥要求并初始化为1,信号量empty和 full分别用来表示空缓冲项和满缓冲项的个数,信号量empty初始化为n,信号量full初始化为0。 2、定义如下结构及数据: 定义缓冲区内的数据类型:typedef int buffer_item; 缓冲区:buffer_item buffer[BUFFER_SIZE];

对缓冲区操作的变量:int in,out; 信号量mutex提供了对缓冲池访问的互斥要求:pthread_mutex_t mutex; 信号量empty和full分别表示空缓冲顶和满缓冲顶的个数:sem_t empty,full; 可以设定生产者的生产速度及消费者的消费速度:int pro_speed,con_speed; 对缓冲区操作的自增函数:#define inc(k) if(k < BUFFER_SIZE) k = k+1;else k=0 3、并定义了如下实现问题的函数模块: 将生产的产品放入缓冲区: int insert_item(buffer_item item) 从缓冲区内移走一个产品: int remove_item(buffer_item *item) 生产者进程:void *producer(void *param) 消费者进程:void *consumer(void *param) 生产者结构进程消费者结构进程 【程序代码】 //sx.c #include

实验一进程创建 Linux实验报告

实验一进程创建 【实验目的和要求】 1、1.了解进程的概念及意义; 2.了解子进程和父进程; 3.掌握创建进程的方法。 【实验内容】 1、1.子进程和父进程的创建; 2.编写附件中的程序实例; 3.撰写实验报告。 【实验原理】 1、原型: #include pid_t fork(void); 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork函数创建子进程的过程为:使用fork函数得到的子进程是父进程的一个复制品,它从父进程继承了进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端,而子进程所独有的只有它的进程号、资源使用和计时器等。通过这种复制方式创建出子进程后,原有进程和子进程都从函数fork返回,各自继续往下运行,但是原进程的fork返回值与子进程的fork返回值不同,在原进程中,fork返回子进程的pid,而在子进程中,fork返回0,如果fork返回负值,表示创建子进程失败。 子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。例如,子进 程获得父进程数据空间、堆和栈的副本。注意,这是子进程所有用的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。 2、原型: #include pid_t vfork(void); vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork函数用于创建一个新进程,而该进程的目的是exec一个新程序。vfork不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,它在父进程的空间中运行。vfork保证子进程先运行,在它调用exit之后父进程才可能被调度运行,当子进程调用这两个函数中的任意一个时,父进程会恢复运行。 【程序代码】 1、1_fork.c

Linux实验报告6

江西理工大学江西理工大学实验报告纸 一、实验目的 掌握如何执行shell脚本,灵活使用shell变量、shell控制结构、shell函数等。学会在Linux下 进行shell编程。 二、实验内容 1.新建脚本文件并执行shell脚本。 2.尝试编写shell脚本实现某种功能。 三、实验过程 1.shell脚本的输入命令 2. shell脚本的输出命令 3.export命令 编写脚本export2 编写脚本export1 运行脚本export1 4.编写一个简单的回显用户名的shell程序 5.if语句 单分支if语句: 格式: if 条件; then 语句1 语句2 ... fi 如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数:Linux系统及编程基础实验报告

双分支if语句: 格式: if 条件; then 语句1 语句2 ... else 语句1 语句2 ... fi 创建一个根据输入的分数判断是否及格的shell程序 多分支if语句: 格式: if 条件1; then 语句1 语句2 ... elif 条件2; then 语句1 语句2 ... elif 条件3; then 语句1 语句2 ... else 语句1 语句2 ... fi 判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。 如果其生产商为GenuineIntel,就显示其为Intel公司; 如果其生产商为AuthenticAMD,就显示其为AMD公司; 否则,就显示无法识别; 6. for语句 格式: for 变量in 列表;do 语句1; 语句2; ...

Linux实验报告

华北科技学院计算机系综合性实验 实验报告 课程名称 Linux操作系统 实验学期 2018 至 2019 学年第二学期学生所在院部计算机学院 年级 16级专业班级信管B16 班 学生姓名学号 成绩评定: 1、工作量: A(),B(),C(),D(),F( ) 2、难易度: A(),B(),C(),D(),F( ) 3、答辩情况: 基本操作: A(),B(),C(),D(),F( ) 代码理解: A(),B(),C(),D(),F( ) 4、报告规范度:A(),B(),C(),D(),F( ) 5、学习态度: A(),B(),C(),D(),F( ) 总评成绩: 指导教师:兰芸 计算机系制

《Linux操作系统》课程综合性实验报告 开课实验室:基础一2019年5月22日 实验题目《Linux操作系统综合实验》——SHELL编程应用 一. 实验目的: 1、掌握Linux操作系统系统管理的基本方法; 2、提出一系列常见综合性问题,锻炼学生解决实际问题的能力。 二. 实验设备及环境: PC兼容机、ubuntu kylin操作系统 三. 实验内容及要求: 实验内容: 某系统管理员需每天做一定的重复工作,请按照下列要求编制一个解决方案,并编程实现该方案。 (1)在下午6 :30删除home/stu/abc目录下的全部子目录和全部文件;(2)从早8:00~下午6:00每小时把home/stu /xyz目录下x1文件的全部数据加入到home/stu /backup目录下的bak01.txt文件内; (3)每逢星期一下午5:50将/home/stu /data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz; (4)在下午5:55将U盘卸载。 四、程序及调试步骤 (1)在下午6:30删除home/stu/abc目录下的全部子目录和全部文件;实验步骤: 1.在home/stu/目录下新建abc/文件夹,并在其中新建一个文件夹 和两个文档,如图所示:

linux实验报告

中南大学 Linux系统实验报告

目录 实验一····································3~9 实验二···································10~16 实验三··································17~17

实验一 Shell程序设计 [ 实验目的 ] 理解Shell程序的设计方法;熟悉Shell程序的编辑、运行、调试方法与过程。 [ 实验内容 ] 考勤模拟Shell程序设计 用shell设计一个考勤模拟程序,实现如下功能选择界面: 1.上班签到 2.下班签出 3.缺勤信息查阅 4.退出 考勤程序运行后,提示用户输入上述功能选择,并验证用户输入的用户名和密码;用户信息保存在userinfo.dat中。 如果是上班签到,记录签到信息,如果签到时间大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat。 如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。 如果用户选择缺勤信息查询,则将check.dat中对应该用户的迟到早退信息查出并显示。 用户选择功能执行完,shell程序继续回到功能选择界面等待下一个用户进行操作。 一、实验分析 本实验是shell程序设计,主要目的是理解shell程序的设计方法以及熟悉shell程序的编辑、运行、调试方法与过程。 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。 本实验要求设计一个考情模拟的shell程序,按照题目要求,可将整个程序分为五个部分:main函数以及四个功能函数,及一个功能对应一个函数。

linux实验报告

学生实验报告 (理工类) 课程名称: Linux操作系统专业班级:12软件工程(Z)学生学号: 1205107014 学生姓名:陈爽 所属院部:软件工程学院指导教师:李莉 2014——2015 学年第 2 学期 金陵科技学院教务处制

实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:RedHat Linux9.0的安装与配置实验学时: 2 实验地点: A205 实验日期: 2015.3.2 实验成绩: 批改教师:李莉批改时间:

一、实验目的和要求 1.熟悉和掌握Red Hat Linux9.0服务器的安装与配置; 2.掌握inux的基本命令使用和功能。 二、实验内容 1.利用PC虚拟机来安装与配置Red Hat inux9; 2.完成安装配置后掌握一些界面及必要的inux命令使用和功能。 三、实验过程与步骤 1)安装虚拟机: (1) 启动VMware Workstation ; (2) 单击“File”—“New”—“virtual machine”,出现新建虚拟机的欢迎界面,点击“next”;

linux实验报告(2)

Linux实验报告 黄芳恺 姓名 班级软件工程114 学号8 指导教师阮越

目录 实验一 Linux基本命令的使用 实验二简单Shell程序设计 实验三 Linux下简单C程序设计与文件操作实验四 Linux下进程操作与进程间通信 实验五 Linux线程的使用 实验六 Linux进程间的IPC 实验七 Linux下访问Mysql数据库 实验八 Linux下网络编程 练习题:grep、bash、生产者消费者

实验一 Linux基本命令的使用 1、实验目的 学习和掌握Linux的基本命令。 2、实验内容和步骤 步骤1:以user_login用户身份并使用telnet登录Linux服务器,按照提示创建自己的账户和口令。 步骤 2:使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。 步骤3:使用pwd命令察看当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF等不同选项并比较不同之处。 -a do not ignore entries starting with -I, --ignore=PATTERN do not list implied entries matching shell PATTERN -l use a long listing format -F, --classify append indicator (one of */=>@|) to entries -A, --almost-all do not list implied . and .. -lF ignore file

步骤4:在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下(cp 源文件目的目录)。察看当前目录下的passwd文件的属主和文件权限。 步骤5:尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容(可使用echo “字符串” >>文件的命令),看看操作能否成功,如果不能成功,请说明原因。用cat 命令浏览文件password的内容,用more命令进行浏览翻页操作,再用less命令浏览文件的内容。比较这几个命令的不同之处 对当前目录中成功,因为该目录下的passwd文件对当前用户具有写的权限。对/etc/passwd 文件的操作被拒绝因为对当前用户不具有写的权限 cat命令将文件的内容全部显示,more命令将文件内容分屏显示,less命令进行刷新的全部显示 步骤6:用ls命令查看test下文件的权限,用mv命令更改文件password的文件名为,尝试用chown和chgrp更改文件的属主为root、组为root,看看能否成功,不成功,请说明原因。尝试用chomd将文件权限为“-rw-------”。看看能否成功,不成功,请说明原因。

6《Linux基础》实验报告 实验6.熟练使用vi编辑器实验

实验序号: 6 《Linux基础》 实验报告 实验名称:熟练使用vi编辑器实验(2) 姓名: 学院:计算机学院 专业: 班级: 学号: 指导教师: 实验地址:N6-113 实验日期:2017-3-22

说明 一.排版要求 1.实验报告“文件名”按模板要求填写。 2.一级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,四号字体,加粗。 3.二级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,小四号字体,加粗。 4.三级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,五号字体。 5.正文:每段缩进量:2个汉字。两端对齐;汉字用宋体,阿拉伯数字用 Times New Roman字体,五号字体。 6.图形要求 (1)在正文中要有引用。 (2)要有图名,图名位于图的下方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)图和图名“居中”。 7.表格要求 (1)在正文中要有引用。 (2)要有表名,表名位于表的上方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)表和表名“居中”。 二.注意事项 1.复制、拷贝、抄袭者取消成绩。 2.没有安实验报告排版要求者不及格。

实验6熟练使用vi编辑器实验(2)【实验目的】 熟悉vi编辑器 1.思考: (1)vi编辑器中,文本插入的命令有哪些?它们分别是什么?(2)在vi编辑器中如何显示文本的行号?给出实验截图。(3)如何在vi编辑器中每次打开文本时,都自动显示行号? 【实验原理】 Vi编辑器,进行一系列的运行 【实验环境】 1.实验配置 本实验所需的软硬件配置如表1所示。 本实验的环境如图1所示。 图1 虚拟机操作实验环境 【实验内容】 1.打开并启动Linux虚拟机。 2.登录Linux系统 (1)用超级管理员帐户登录BASH字符界面。 3.

linux实验报告

实验报告6 课程名称:Linux基础实验名称:Linux进程控制 学生姓名:汪磊班级:计科132 学号:090313217 指导老师:钱振江成绩: 一、实验目的 1.掌握进程的创建,用fork产生的子进程与父进程的关系; 2.掌握exec函数族的应用。 二、实验任务与要求 1.熟悉父进程创建一个子进程,父进程与子进程之间的数据结构与变量存放的问题; 2.子进程与父进程间的关系; 3.execl、execv函数的应用; 4.execlp函数的应用; 5.execle函数的应用; 三、实验工具与准备 计算机PC机,Linux Ubuntu操作系统 四、实验步骤与操作指导 1.调试下列程序。 步骤1 用vi编辑程序6-1.c。 [root@localhost root]# vi 6-1.c #include #include #include #include int main(void) { pid_t pid; char *message; int n; pid = fork(); if (pid < 0) { /*进程创建失败*/ perror("fork failed"); exit(1); } if (pid == 0) { /*子进程执行*/ message = "This is the child\n"; n = 3; } else { /*父进程执行*/ message = "This is the parent\n"; n = 6; }

for(; n > 0; n--) { printf(message); sleep(1); } return 0; } 步骤2 用gcc编译程序。 用gcc的”-o”选项,将6-1.c程序编译成可执行文件6-1,输入如下: [root@localhost root]#gcc 6-1.c –o 6-1 步骤3 运行程序。 编译成功后,执行程序6-1. 问题思考: (1)从程序的运行结果分析程序的并发执行情况。 (2)从程序的运行结果分析,你如何理解子进程与父进程共用同一个数据结构,但在不同的空间内? (3)如果在子进程中给变量n赋值6,在父进程中给变量n赋值3,请分析程序运行的结果。 (4)把程序中的“sleep(1);”去掉,程序的运行结果如何改变?请记录实验结果并分析。 2.程序设计。 设计一个程序,产生一个子进程,在父进程内调用终端命令vi编辑一个文本文件,在子进程内测试系统与baidu的网络连通情况,在父进程中观察fork函数的返回值与子进程号有什么关系。当子进程退出后,父进程才退出。 3.调试下列程序,观察程序的运行结果,并说明程序的功能和过程。 #include /*文件预处理,包含标准输入输出库*/ #include /*文件预处理,包含system、exit等函数库*/ #include /*文件预处理,包含fork、getpid、getppid函数库*/ #include /*文件预处理,包含fork函数库*/ int main () /*C程序的主函数,开始入口*/ { pid_t result; result=fork(); /*调用fork函数,返回值存在变量result中*/ int newret; if(result==-1) /*通过result的值来判断fork函数的返回情况,这儿先进行出错处理*/ { perror("创建子进程失败"); exit(0); } else if (result==0) /*返回值为0代表子进程*/ { printf("返回值是:%d,说明这是子进程!\n此进程的进程号(PID)是:%d\n此进程的父进程号(PPID)是:%d\n",result,getpid(),getppid()); execl(“/bin/ls”,”ls”,”-l”,0);/*调用ls程序,显示当前目录下的文件信息*/ } else /*返回值大于0代表父进程*/ {

相关文档
最新文档