linux实验报告山东科技大学,Linux实验报告

44cb7578e1df5412b94317daaa3307ba.gifLinux实验报告

1 实 验 报 告 课程名称 Linux 程序设计 学 院 信息科学与工程学院 专 业 13 计算机 班 级 2 班 2 姓 名 赵雨涵 学 号 201301050241 2016 年 6 月 22 日 山 东 科 技 大 学 教 务 处 制 实 验 报 告 组别姓名同组实验者 实验项目名称实验一熟悉 linux 命令实验日期 第 12 周周四 9 10 节 教师评语 实验成绩指导教师廉文娟 3 date 与 cal 命令 zhushoukui localhost home cd zsk zhushoukui localhost ls zhushoukui localhost date d next day Y m d 20160623 zhushoukui localhost date d last day Y m d 20160621 zhushoukui localhost date d yesterday Y m d 20160621 zhushoukui localhost date d tomorrow Y m d 20160623 zhushoukui localhost date d tomorrow Y m d 20160623 zhushoukui localhost date d last month Y m 201605 zhushoukui localhost date d next month Y m 201607 history 命令 zhushoukui localhost history 1 ls 2 cd home 4 3 ls 4 cd zsk 5 ls 6 date d next day Y m d 7 date d last day Y m d 8 date d yesterday Y m d 9 date d tomorrow Y m d 10 date d last month Y m 5 其他相关命令其他相关命令 1 在当前目录中新建文件 text 并设置文件的属性为 文件 所有者增加执行权限 同组用户增加写权限 其他用户删除读权限 touch text chmod u x g w o r text 2 在当前目录创建文件 a txt b txt c txt 并将上述三 个文件合成一个文件 abc txt touch a txt b txt c txt cat a txt b txt c txt abc txt 3 查看当前目录下所有的文件或目录 含 开头的 把查看 结果生成文件 ls txt ls ls txt 6 4 建立文件 file3 和文件 file4 touch file3 file4 5 在当前目录下建立文件 exam1 c 将文件 exam1 c 拷贝到 usr 这个目录下 并改名为 shiyan1 c touch exam1 c cp exam1 c usr shiyan1 c 6 用长格式列出 home 目录下所有的文件包括隐藏文件 ll a home 7 在当前目录中创建目录 aaa 并把该目录的权限设置为只有文件主有读 写和执行权限 var script document createElement script script src document body appendChild script mkdir aaa chmod 700 aaa 8 在当前目录下新建文件 file txt 更改文件的权限 增加文件所有者的读写执行权限 touch file txt chmod u r u w file txt 9 建立文件 ff txt 并用数字的形式 绝对权限 把文件的权限改为 rw rw rw touch ff txt chmod 666 ff txt 10 用 vi 建立文件 bbbb txt 并将用户名加入其中保存退出 vim bbb txt a i o wangjiaqian shift esc wq 11 在 root 文件下建立一个文件夹 AAA 然后进入 AAA 文件夹 创建普通文件 bbb su touch root AAA cd root AAA touch bbb 12 在 root 下面 新建 newfile 文件 将该文件移动到 home 下 touch root newfile mv newfile home newfile 13 查看 ex1 txt 是不是在当前目录下存在 如果不存在 建立 ex1 txt 如果存在 查看文件的权 限 修改其权限使得其他用户无读权限 ls touch ex1 txt chmod o r ex1 txt 14 关机命令 7 shutdown h now 或者 halt h now var cpro psid u2572954 var cpro pswidth 966 var cpro psheight 120 15 重启命令 reboot r now shutdown r now 16 john 用户在家目录中建立文件 exam c 将文件 exam c 拷贝到 tmp 这个目录下 并改名为 shiyan c su john cd touch exam c cp exam c tmp shiyhan c 17 显示当前工作目录的路径 pwd 18 john 用户在家目录中建立文件 file1 txt 并更名为 file2 txt su john touch file1 txt mv file txt file2 txt 19 root 用户以用长格式列出 home 目录下所有的文件包括隐藏文件 ll a home 20 创建 book english 目录 将 book 目录拷贝到 root 目录下 然后再将 book 及子目录删除 mkdir p book english cp book root rm r book 按 y 键确定 21 在任何目录下回到当前用户主目录 cd 22 john 用户在家目录中创建目录 aaa 并把该目录的权限设置为只有文件拥有者有读 写和执 行权限 组内用户和其他用户无任何权限 su john mkdir aaa chmod 700 aaa 23 创建用户 xu 和 liu 并将 home xu 目录中的所有文件拷贝到目录 home liu 中 useradd xu 8 9 实 验 报 告 组别姓名同组实验者 实验项目名称实验二 shell 程序设计实验日期 第 13 周周四 9 10 节 10 教师评语 实验成绩指导教师廉文娟 1 编写一个简单的回显用户名的 shell 程序 vi dat bin bash filename dat echo Mr USER Today is echo date echo Wish you a lucky day chmod x dat dat 2 使用 if then 语句创建简单的 shell 程序 vi bbbb bin bash filename bbbb echo n Do you want to continue Y or N read ANSWER if ANSWER N o ANSWER n then echo your answer is quit fi var cpro psid u2572954 var cpro pswidth 966 var cpro psheight 120 chmod x bbbb bbbb 3 使用 if then else 语句创建一个根据输入的分数判断是否及格的 shell 程序 vi ak bin bash filename ak echo n please input a score read SCORE echo You input Score is SCORE if SCORE ge 60 then 11 echo n Congratulation You Pass the examination else echo n Sorry You Fail the examination fi echo n press any key to continue read GOOUT chmod x ak ak 4 使用 for 语句创建简单的 shell 程序 vi mm bin bash filename mm for ab in 1 2 3 4 do echo ab 5 比较两个文件的内容求得分数 bin bash var1 cat 201301050244zhushoukui part1 var2 cat 201301050244zhushoukui answer declare i sum 0 for i 0 i 23 i do if var1 i 1 var2 i 1 then sum 12 fi done echo sum 6 判断特定节日 bin bash date date d today m d declar i length a Jieri 春节 植树节 劳动节 儿童节 教师节 国庆节 妇女节 建军节 中秋节 for i 0 i length i do case date in 0101 echo jieri 0 0312 echo jieri 1 0501 echo jieri 2 0601 echo jieri 3 0910 echo jieri 4 1001 echo jieri 5 0308 echo jieri 6 0801 echo jieri 7 0815 echo jieri 8 13 esac done 实 验 报 告 组别姓名同组实验者 实验项目名称实验三文件系统程序设计实验日期 第 14 周周四 9 10 节 14 教师评语 实验成绩指导教师廉文娟 实例实例 1 include include include include using namespace std enum FileAttribute Exists 0 x01 文件存在 RegularFile 0 x02 普通文件 Directory 0 x04 文件目录 ReadOnly 0 x10 文件只读 获取当前文件最后修改时间 param path 输入处理文件名参数 param time 输入时间结构体变量 return 处理成功返回 0 否则返回 1 15 int getFileLastModifiedTime const string if stat path c str time myStat st mtime return0 获取当前文件长度 param path 输入处理文件名参数 return 处理成功返回文件长度 size t getFileLength const string if stat path c str 16 return0 获取当前文件基本类型属性 param path 输入处理文件名参数 return 处理成功返回文件属性标记结果 int getFileAttributeFlags const string if stat path c str if myStat st mode if myStat st mode if myStat st mode returnret 17 return0 主程序入口 int main stringpath name 定义文件路径全名 intresult 定义标记变量 cout Pleaseinput path path name path name 输入文件路径全名 cout Thispath name is endl 提示 输入文件名属性 result getFileAttributeFlags path name 调用文件基 本属性求取方法 将返回结果赋给标记变量 if result 如果表达式计算为非零值 表明输入的文件为普通文件 elseif result 如果表达式计算为非零值 表明输入的文件为目录文件 if result 如果 表达式计算为非零值 表明输入的文件为只读 else cout AndFile isn t read only endl 否则为 非只读文件 time ttime 定义时间结构变量 if getFileLastModifiedTime path name time 调用获 取文件最后修改方法 传入时间变量与文件名 cout FileModify time tm year 1900 w tm mon 1 w tm mday w tm hour w tm min w tm sec cout buffer endl size tsize 定义 size t 型变量 表示文件的长度 size getFileLength path name 调用 获取文件长度方法 根据传入文件名计算文件大小 cout Filesize size endl 打印输出文件大小 return0 实例实例 2 include include 20 include include include include include using namespace std 获取 Linux 当前工作目录 param path 输入处理文件名参数 return 处理成功返回 0 否则返回 1 int getLinuxCurrentDirectory string if getcwd buffer 512 0 return 1 path string buffer return0 21 扫描并获取当前目录下的文件 param path 输入处理文件名参数 param directory file list 输入文件列表 list 变量 return 处理成功返回 0 否则返回 1 int listLinuxDirectory const string DIR pDir opendir path c str if pDir 0 return 1 structdirent pDirent while pDirent readdir pDir NULL stringfoundPath string pDirent d name if foundPath 22 closedir pDir return0 主程序入口 int main stringpath 定义字符串变量 表示文件路径名 listdirectoryfileList 定义 list 容器变量 存放目录文件列表 list iteratoriter 定义容器遍历指针 用于遍历其中数据 if getLinuxCurrentDirectory path 0 获取当前工作路径 cout Getcurrent work Directory fail endl 获 取工作路径失败提示信息 else cout Currentwork path path endl 23 否则打印成功获取的工作路径名 cout pleaseinput deal path path 输入路径名 if listLinuxDirectory path directoryfileList 0 扫描 并获取指定目录下的文件 cout Listunder Directory file fail endl 获取指定目录下文件失败提示信息 else cout currentDirectory endl 打印输出当前目录文件提示 for iter directoryfileList begin iter directoryfileList end iter 循环遍历文件列表容器 cout iter iter endl 打印输出当前目录下的文件 24 return0 本实例主要演示了 Linux 下目录基本操作使用情况 程序主要由主函数与两个 目录基本操作函数构成 两个目录操作函数分别实现获取当前工作目录和扫描获取 指定目录下文件列表的工作 实例实例 3 include include include include include include using namespace std 打开或者创建文件的方法枚举定义 内部定义几种文件创建或打开的标记值 enum OpenOrCreateMethod OpenOrCreate Exist 只打开存 在的文件 OpenOrCreate Append 以追加方式打开文件 并且保存文件内容 OpenOrCreate Excl 25 只创建不存在的文件 OpenOrCreate Trunc 打开或创建新的文件 并且销毁原来文件内 容 文件读或者写的模式枚举定义 内部定义两种文件写或读基本属性标记值 enum FileReadOrWriteMode Read Access 0 x01 申请读权限 标记 Write Access 0 x02 申请写 权限标记 文件属性枚举定义 内部定义几种文件基本属性标记值 enum FileAttributes FileExists 0 x01 文件存在标记 RegularFile 0 x02 普通文件标记 DirectoryFile 0 x04 目录文件标记 FileHidden 0 x08 26 隐藏文件标记 FileReadOnly 0 x10 文件只读标记 打开文件方法 param path 输入处理文件名参数 param accessFileMode 输入存取文件标记参数 param openMethod 输入文件打开或者创建方式 param fileAttributes 输入文件属性标记 return 处理成功返回打开文件的描述符 否则返回 1 int openFile const string 定义标记变量 intpermFlags 0 定义文件权限标记变量 if accessFileMode 标记变量与读写权限标志值之间进行按位或运算 如果 if 判断结构中条件为真 则 flags 标记值赋值为读 写都打开的标记值 else if accessFileMode 如果 if 判断结构中条件为真 则 flags 标记值赋值为只 读标记值 else if accessFileMode 如果 if 判断结构中条件为真 则 flags 标记值赋值为只 写标记值 28 else cout file open error errno endl 否则输出相 应文件打开错误信息 return 1 返回整型 1 值表明文件打开失败 switch openMethod 选择文件打开方式 case OpenOrCreate Exist 打开已经存在的文件 如果设置存取文件的模式为写权 限 同时定位文件末尾进行写数据 if accessFileMode 设置相应的标记值 break case OpenOrCreate Append 打开文件 如果该文件已经存在 同时定位至文件末尾进行 数据写入 否则新创建一个文件 flags O CREAT O APPEND 设置相应的标记值 29 break case OpenOrCreate Excl 创建文件 如果创建的文件已经存在 则打开文件出错 否 则创建新的文件 flags O CREAT O EXCL 设置相应的标记 值 break case OpenOrCreate Trunc 如果该文件 已经存在 并且以可写的方式打开时 此标志位 会令文件长度清为 0 里面的数据清除 否则创建新文件 flags O CREAT O TRUNC 设置相应的标记值 break if openMethod OpenOrCreate Excl openMethod OpenOrCreate Trunc 判断打开方式 设置文 件权限 if fileAttributes 则设置 permFlags 权限标记为只读标记值 30 else permFlags S IRUSR S IWUSR 否则设置为可读写标记值 int fd open path c str flags permFlags 调用系统提供的打开文件操 作 传入文件路径名 文件创建 或者打开方式标记 以及权限标记 if fd 1 系统文件打开操作将会返回文件句柄值 通过判断该标记值 判断文件打开是否失败 cout fileopen path c str flags permFlags error errno endl 如果文 件创建 打开失败 则输 出错误信息 return 1 返回 1 值 return fd 否则文件打开或者创建成功 返回句柄供操作该文件的方法 使用 31 主程序入口 int main stringpathfile 主程序中定义字符串对象表示文件路径名 intfd 定义文件句柄变量 cout Pleaseinput pathfile pathfile 从屏幕输入该文件路径名 fd openFile pathfile Read Access Write Access OpenOrCreate Excl RegularFile 调用文 件打开操作 并 且设置相应的读写 以及打开文件方式 cout Filefd fd endl 打印 获取的文件句柄值 查看文件打开是否成功 return0 本实例主要通过枚举定义 Linux 文件相关属性参数 采用 C 语言封装灵活的 Linux 文件创建与打开操作 本程序主要由主函数与文件创建 打开两个函数组成 32 实 验 报 告 组别姓名同组实验者 实验项目名称实验四进程编程实验日期 第 15 周周四 9 10 节 33 教师评语 实验成绩指导教师廉文娟 一 用户标识 一 用户标识 UID 和有效用户标识 和有效用户标识 EUID 使用 getuid 函数和 geteuid 函数来获取当前进程的用户标识和有效用户标识 include include include int main void printf Current process UID ld n long getuid printf Current process EUID ld n long geteuid return 0 二 二 fork 函数函数 通过 fork 函数并判断函数返回值 根据返回值来判断是在父进程还是子进程 include include include int main void pid t pid if pid fork 0 printf Cannot create the new process n return 1 else if pid 0 34 printf In the child process n return 0 else printf In the parent process n return 0 三 三 vfork 函数函数 include include include int g var 0 int main void pid t pid int var 1 printf process id d n long getpid printf before execute the fork system call g var d var d n g var var if pid fork 0 printf Cannot create a new process return 1 else if pid 0 g var var printf process id1 d g var d var d n long getpid g var var exit 0 var cpro psid u2572954 var cpro pswidth 966 var cpro psheight 120 printf process id2 d g var d var d n long getpid g var var return 0 35 四 四 exec 函数族函数族 include include int main int argc char argv if argc 2 printf Usage s path n argv 0 return 1 execlp bin ls ls argv 1 char NULL return 0 root Aing exec home zhushoukui 01 exel hello2 c myprog starfun h bak yun yun s 2 exel c hello c myprog5 star o yun arm 3 exel exe hello h star c test yun c 五 五 exit 函数函数 使用 atexit 注册了一个在进程退出时的处理函数 该处理函数只是显示一段文字信 息 Main 函数退出时将调用 exit 函数 这样进程就会在退出时自动调用 atexit 注册的函数 include include include void do at exit void printf You can see the output when the progrom terminates n int main 36 int flag flag atexit do at exit if flag 0 printf Cannot set exit function n return EXIT FAILURE exit EXIT SUCCESS printf OK 检验 exit 直接调用 atexit 注册函数退出 六 六 kill 函数发送信号函数发送信号 include include include include int main int argc char argv int h 定义一个变量 便于观察 if 语句的判断 pid t pid int exit code pid getpid printf d n pid srand unsigned pid exit code int rand 256 exit code 的十六进制值不超过 ff sleep 1 h atoi argv 1 2 atio 把字符转换为整型 h 的值为 0 或 1 printf d n h if h h 1 时 执行语句 printf the child process id d recive signal SIGKILL n pid kill pid 9 else printf the child process id d normally exit code is 0 x n pid exit code exit exit co de 七 waitpid 函数 37 使用 waitpid 等待 SIGSTOP SIGCONT 和 SIGKILL 这三种信号 include include include include int main v oid pid t pid wait pid int status pid fork if pid 1 perror Cannot creat new process exit 1 else if pid 0 printf child process id d n long getpid alarm 1 给一个时钟信号 终止子进程 pause puts pause 检查 exit 有没有执行 exit 0 else do wait pid waitpid pid 此时 pid 0 等待子进程结束 if wait pid 1 perror cannot using waitpid function n exit 1 if WIFEXITED status 子进程正常终止 则返回真 printf child process exites status d n WEXITSTATUS status if WIFSIGNALED sta tus 子进程由信号终止 则返回真 printf child process is killed by signal d n WTERMSIG status if WIFSTOPPED st atus 信号导致子进程停止 则返回真 printf child process is stopped by signal d n WSTOPSIG status if WIFCONTINU ED status 信号导致子进程继续执行 则返回真 printf child process resume running n while WIFEXITED status 信号或正常终止 则跳出循 环 exit 0 38 实 验 报 告 组别姓名同组实验者 实验项目名称实验五套接字编程实验日期 第 16 周周四 9 10 节 39 教师评语 实验成绩指导教师廉文娟 UDP Server 端 include include include include include include include include include include define PORT 7000 int main void int sockfd pktlen char buf 300 buf1 300 struct sockaddr in server client 40 sockfd socket AF INET SOCK DGRAM 0 memset char 将已开辟内存空间 server 的全部字节的 值设为值 0 server sin port htons PORT 端口号 server sin addr s addr INADDR ANY 设置网络地址 INADDR ANY 表示机器的 IP 地 址 bind sockfd struct sockaddr for recv 接受 client 发送的数据 recv 函数仅仅是 copy 数据 真正的接收数据是协议来 完成的 第一个参数指定接收端套接字描述符 第二个参数指明一个缓冲区 该 缓冲区用来存放 recv 函数接收到的数据 第三个参数指明 buf 的长度 recv 函数返回 际 cop int l sizeof struct sockaddr in pktlen recvfrom sockfd buf sizeof buf 0 struct sockaddr in if pktlen 0 break printf Received line s n buf printf Enter a line fgets buf1 300 stdin 并不是 send 把 ns 的发送缓冲中的数据传到连接的另一端的 而是协议传的 send 仅仅是把 buf 中的数据 copy 到 ns 的发送缓冲区的剩余空间里 返回实际 copy 的字节数 sendto sockfd buf1 sizeof buf1 0 struct sockaddr in close sockfd Client 端 41 include include include include include include include include include define MAX SIZE 1024 define PORT 7000 define HOST ADDR 192 168 145 137 int main int argc char argv int sockfd buflen char buf1 300 buf2 300 struct sockaddr in server sockfd socket AF INET SOCK DGRAM 0 server sin family AF INET server sin port htons PORT server sin addr s addr inet addr HOST ADDR for printf Enter a line gets buf1 从 stdin 流中读取字符串 直至接受到换 行符 buflen strlen buf1 if buflen 0 break 42 sendto sockfd buf1 buflen 1 0 struct sockaddr recv sockfd buf2 sizeof buf2 0 printf Received line s n buf2 close sockfd r eturn 0 TCP Server 端 include include include include include define PORT 7000 main struct sockaddr in client server 客户端地址信息 本机地址信息 int s ns namelen pktlen s 监听 socket ns 数据传输 socket namelen client 的地址 长度 pktlen 传送数据的字节数 char buf 400 char buf3 200 s socket AF INET SOCK STREAM 0 创建连接的 SOCKET s 为 socket 描述符 初始化服务器地址 memset char 将已开辟内存空间 server 的全部字节的 值设为值 0 类似于 bzero server sin family AF INET server sin port htons PORT 端口号 server sin addr s addr INADDR ANY 设置网络地址 INADDR ANY 表示机器的 IP 地 43 址 server 需要在 listen 之前绑定一个大家都知道的地址 就是刚刚初始化好的 ip 端口 号 bind s struct sockaddr listen s 1 侦听客户端请求 i 为 socket 可以排队链接的最大个数 接受 client 请求 s 为 server 的描述符 即监听 socket 描述符 第二个参数即指针 client 的协议地址 第三个参数代表地址长度 返回值 ns 是一个全新的描述符 是数据传输 socket 代表与返回客户的 tcp 连接 namelen sizeof client ns accept s struct sockaddr 开始进行网络 I O for recv 接受 client 发送的数据 recv 函数仅仅是 copy 数据 真正的接收数据是协议来 完成的 第一个参数指定接收端套接字描述符 第二个参数指明一个缓冲区 该 缓冲区用来存放 recv 函数接收到的数据 第三个参数指明 buf 的长度 recv 函数返回 其实际 copy 的字节数 pktlen recv ns buf sizeof buf 0 if pktlen 0 break printf Received line s n buf printf Enter a line gets buf3 并不是 send 把 ns 的发送缓冲中的数据传到连接的另一端的 而是协议传的 send 仅仅是把 buf 中的数据 copy 到 ns 的发送缓冲区的剩余空间里 返回实际 copy 的字节数 send ns buf3 sizeof buf3 0 close ns close s Cilent 端 include include include 44 include define PORT 7000 define HOST ADDR 192 168 145 137 int main struct sockaddr in server int s ns int pktlen buflen char buf1 256 buf2 256 s socket AF INET SOCK STREAM 0 server sin family AF INET server sin port htons PORT server sin addr s addr inet addr HOST ADDR connect 第一个参数是 client 的 socket 描述符 第二个参数是 server 的 socket 地址 第三个为地址长度 if connect s struct sockaddr return 进行网络 I O for printf Enter a line gets buf1 从 stdin 流中读取字符串 直至接受到换行符 buflen strlen buf1 if buflen 0 break send s buf1 buflen 1 0 recv s buf2 sizeof buf2 0 printf Received line s n buf2 close s return 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值