Linux系统编程实验三:文件编程.doc
Linux程序设计实验报告大作业

线程在并发执行时为了保证结果的可再现性,各线程执行序列必须加以限制以保证互斥地使用临界资源,相互合作完成任务。多个相关线程在执行次序上的协调称为线程同步。用于保证多个线程在执行次序上的协调关系的相应机制称为线程同步机制。
Pthread线程库提供了多种方式来处理线程同步互斥机制,最常用的是互斥锁、条件变量和信号量。
编译并运行程序:结果是10。我们创建两个线程,counter的初值为0,各自把counter增加10次,正常情况下最后counter应该等于20四、实验总结
通过本次实验,我学会了在Linux下使用C语言操作线程的方法,了解了线程和进程的区别,对于理解Linux的核心非常有帮助。
实验报告
组别
姓名
张正锟
可以看到,程序只在父进程进行了输出。这是因为子进程调用了_exit()函数,没有进行缓冲区IO的刷新。
通过本次试验,我了解了Linux的进程机制,学会了基本的进程创建,进程终止,学会了在Linux下用C语言操作进程。了解到了Linux是一个多任务操作系统,允许我们使用计算机系统,多个进程并发执行。
实验报告
Socket是网络编程的一种接口,它是一种特殊的I/O。
多线程的进程在同一地址空间内包括多个不同的控制流,也即属于同一进程下的线程,它们共享进程拥有的资源,如代码、数据、文件等。线程也独占一些资源,如堆栈、程序计数器等。
linux实验报告3 Linux上C程序编译,调试和工程文件管理

深圳大学实验报告课程名称:Linux操作系统实验项目名称:Linux上C程序编译,调试和工程文件管理学院:计算机与软件学院专业:软件工程指导教师:冯禹洪报告人:文成学号:2011150259 班级:02 实验时间:2013/12/31实验报告提交时间:2013/12/31教务处制一、实验目标:熟悉Linux上C程序设计环境,包括以下内容:1. 联机帮助man命令2. 编译工具gcc的使用3. 熟悉使用gdb来调试程序4. 熟悉C工程文件的管理工具makefile二、实验环境与工件湖边Linux实验室Fedora 13三、实验内容与步骤1.动态库函数可以在多个应用程序之间共享,可以减少应用程序文件的容量和应用程序的装载时间。
因此,熟悉构建动态库可以提高软件的编写质量。
请跟随以下步骤构建动态库message,并用其编写程序、编译和运行。
(40分)1.1编写源程序message.c(见图1)和main.c(见图2)图1. message.c源程序图2.main.c源程序1.2用以下命令对message.c进行编译,其中,“-fPIC”选项是告诉gcc产生的代码不要包含对函数和变量具体内存位置的引用。
1.3以上命令将获得目标文件message.o,使用以下命令建立共享函数库message:1.4使用1.3获得的共享函数库来编译main.c文件1.5设置共享函数库搜索路径1.6运行程序并附上结果1.7构建静态可执行程序1.7.1$gcc –c message.c1.7.2$ar –crv libmsg.a message.o1.7.3$gcc –o main main.c –L./ -lmsg1.7.4$./main1.8运行以下两个命令并截图说明结果:$ldd goodbye$ldd main$ls –l goodbye main/*附加题:经观察,如果用ubuntu, main 和googbye的大小在一些发行版本下没有区别,如果实验如此,请尝试解释这一现象。
linux实验3_文本处理

实验三Linux系统的文本处理目录实验三Linux系统的文本处理 (1)1实验环境 (2)2实验内容 (2)2.1文本编辑工具Vim (2)2.1.1命令模式 (2)2.1.2输入模式 (4)2.1.3底线命令模式 (4)2.2文本文件查看命令 (7)2.2.1 cat (7)2.2.2 more (8)2.2.3 less (9)2.2.4 head (10)2.2.5 tail (11)2.2.6 stat (12)2.2.7 wc (12)2.2.8 file (13)2.2.9 diff (13)2.3文本文件处理命令 (14)2.3.1 grep (14)2.3.2 sed (16)2.3.3 awk (18)2.3.4 cut (20)2.3.5 tr (21)3实验小节 (22)1实验环境本实验根据移动云平台的《Linux指令入门-系统管理》进行,为了直观展示linux命令对文件的操作,部分实验使用个人电脑双系统的linux环境,这样可以直接打开文件观察。
由于没有使用docker或虚拟机来备份恢复系统,所以分盘等操作会影响linux系统的使用,因此部分实验直接使用移动云的ECS实例。
2实验内容2.1文本编辑工具Vimvim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
三种模式切换快捷键:2.1.1命令模式在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。
使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。
以下是在命令模式中常用的快捷操作:2.1.2输入模式在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。
实验三 Linux 文件处理_计算机操作系统实验指导(Linux版)_[共2页]
![实验三 Linux 文件处理_计算机操作系统实验指导(Linux版)_[共2页]](https://img.taocdn.com/s3/m/8cc06076284ac850ad0242db.png)
行“man write”时,输出结果却不是我们所需要的。
因为我们要的是write函数的说明,可显示的却是write命令的说明。
为了得到write函数说明,我们需要用“man 2 write”。
2表示我们用的write函数是系统调用函数。
执行“man named”命令,屏幕上会显示“NAMED(8)”字样,说明named是包含在“系统管理员相关的命令”中。
对于像open这种既有命令、又有系统调用的,若不加数字执行,man命令默认从数字较小的手册中寻找相关命令和函数,即“man open”执行的结果将显示“open(1)”,如希望查看open系统调用,则需输入“man 2 open”。
man命令执行中往往包含很多的字段,它们分别是以下这些。
● NAME:简短的命令、数据名称说明。
● SYNOPSIS:简短的命令语法描述。
● DESCRIPTION:较为完整的说明。
● OPTIONS:针对SYNOPSIS部分中,所有可用的选项说明。
● COMMANDS:程序运行时可在该程序中执行的命令。
● FILES:程序或数据所使用/参考/连接到的某些文件。
● SEE ALSO:可参考的、与该命令或数据有关的其他说明。
● EXAMPLE:一些可参考的范例。
● BUGS:是否有相关的错误。
通常只需关注NAME、DESCRIPTION两个字段,NAME代表该命令的名称,DESCRIPTION为该命令的一些常见参数及代表的含义。
实验提示本次实验可在阅读本书第1.2节内容并对Linux的使用有个基本的了解和认识后开始。
在使用Linux操作命令的过程中,可借助“man”了解相关命令的功能描述和参数的使用方法(见本实验的实验指导)。
实验三 Linux文件处理实验目的(1)熟悉Linux文件系统的文件和目录结构,掌握Linux文件系统的基本特征。
(2)掌握命令行方式下文件操作命令和程序中文件操作函数的使用方法。
(3)掌握Linux文件系统的加载和卸载方法。
实验报告-Linux-实验三-Linux文件管理与常用命令

下面给出示例,如图3-2所示。
图3-2 more命令显示/etc/inittab文件
(3)less命令
该命令的功能和more命令的功能基本相同,也是用来按页显示文件。如果要按页显示/etc/inittab文件,显示效果,如图3-3所示。
图3-3 less命令显示/etc/inittab文件
3、熟悉Linux下常用的压缩归档工具gzip,bzip,tar,zip的相关操作。
实验仪器:
Windows 7装有Red Hat Enterprise Linux 5.2操作系统虚拟机PC机一台。
实验内容及步骤(或程序清单):
1、用root账户登录到终端,使用cat,more,less,head,tail等命令显示/etc/inittab文件。
图3-7复制/etc目录到/test
4、将/root/test/etc目录用tar命令打包成etc.tar.gz,查看etc.tar.gz的内容,解压缩etc.tar.gz。如图3-8所示。
实验内容及步骤(或程序清单):
图3-8 tar命令压缩/etc并解压缩
5、删除test目录,如图3-9所示。
图3-9删除test目录
通过该实验熟悉了linux操作系统文件及文件夹的相关命令操作掌握了linux下常用的压缩归档工具gzipbziptarzip的使用方法对今后学习linux操作系统起到很大帮助
姓名:黄兵周
学号:07
2013年10月16日
实验项目:文件管理与常用命令
实验目的:
1、熟悉文件显示的相关操作;
2、熟悉文件及文件夹的相关操作;
实验内容及步骤(或程序清单):
(4)head命令
linux操作系统实验三

实验三LINUX SHELL脚本程序设计一、实验目的通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL程序设计的基础知识。
对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理解。
通过本实验,学生应能够基本掌握编写SHELL程序的步骤、方法和技巧。
二、实验环境操作系统:任何Unix/Linux及Sun Solaris 或windows 系列应用系统:SHELL 或windows环境下的cygwin模拟系统三、实验内容本实验包含三个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术。
内容如下:⑴创建以下菜单程序:USER: **** HOST: ******** DATE: **/**/20**A: 创建子目录并复制文件B: 文件权限测试C: 文件字符转换D: 文件总数及文本行数统计E: 文件查找Q: 退出系统———————————————————————————————A:在用户家目录下创建名字为本人姓名的子目录,其存取权限为(drwxr-xr-x)。
测试目录确实存在后,将已存在的file1、file2两文件拷入其中并分别显示两文件的内容。
显示完成后将file1、file2两文件截断为大小为0的空文件。
B:测试当前用户对系统中某文件是否有r、w、x的权限,输出测试结果。
C:将file1、file2两文件中的小写字符转换为大写,并将转换后的内容分别写入新文件。
判断上述操作成功后分别显示转换后的新文件的内容。
D:统计/dev目录下目录文件和符号链接文件的数目;统计系统中某文本文件中空行的行数;显示当前系统中所有环境变量。
E:在/dev目录下查找由s开头且文件名由5个字符组成的文件,找到后用file命令显示其文件类型。
yxh@Cancer:~$ #!/bin/shyxh@Cancer:~$ MYDATE='2016-11-01'yxh@Cancer:~$ THIS_HOST='yxh'yxh@Cancer:~$ USER='yinxiaohang'yxh@Cancer:~$ while :> do> tput clear> cat <<MAYDAY> ------------------------------------------------------------------------------ User:$USER Host:$THIS_HOST Date:$MYDATE ------------------------------------------------------------------------------A:创建子目录并复制文件B:文件权限测试C:文件字符转换D:文件总数及文本行数统计E:文件查找Q:退出系统------------------------------------------------------------------------------> MAYDAY> echo -e -n "\tYour Choice [A,B,C,D,E,Q] : "> read CHOICE> case $CHOICE in> A|a)mkdir --mode=755 /home/yxh/test/yinxiaohang> if test -d "/home/yxh/test/yinxiaohang"> then cp file1 file2 /home/yxh/test/yinxiaohang> cat file1> cat file2> :> /home/yxh/test/yinxiaohang/file1> cat /home/yxh/test/yinxiaohang/file1> :> /home/yxh/test/yinxiaohang/file2> cat /home/yxh/test/yinxiaohang/file2> else echo file1 is not a file name> fi> ;;> B|b) if [ -f file1 ]> then test -r file1 -a -w file1 -a -x file1> ls -l file1> else echo file1 do not rwx> fi> ;;> C|c)tr 'a-z' 'A-Z' < file1 > 1> tr 'a-z' 'A-Z' < file2 > 2> if test -f 1 -a 2> then cat 1> cat 2> else echo fail!> fi> ;;> D|d)ls -l /dev> ls -l /dev |grep ^d|wc -l> ls -l /dev |grep ^l|wc -l> cat 3> cat 3|grep '^$'|wc -l> env> ;;> E|e)find /dev -name "s[a-z][a-z][a-z][a-z]"> find /dev -name "s[a-z][a-z][a-z][a-z]" >4 > var=$(cat 4)> file -b ${var%%.*}> ;;> Q|q)exit 0> ;;> *)echo -e "\t\007unknown user reponse"> ;;> esac> echo -e -n "\tHit the return key to continue" > read DUMMY> done⑵文件pc.txt中保存了三个班级的学生选课成绩,试编写一段shell程序对文件内容进行统计、计算后输出各个班级选课的学生人数及每班选课成绩的优秀率。
linux 基本操作 实验报告

linux 基本操作实验报告《Linux基本操作实验报告》Linux操作系统是一款开源的操作系统,具有稳定性高、安全性强等特点,因此在服务器领域得到了广泛的应用。
对于初学者来说,熟悉Linux的基本操作是非常重要的,下面我将分享一份Linux基本操作的实验报告。
实验一:登录和退出Linux系统首先,我们需要了解如何登录和退出Linux系统。
在登录界面输入用户名和密码后,我们就可以进入系统。
在系统中,我们可以使用命令“exit”来退出系统。
实验二:文件和目录操作在Linux系统中,文件和目录的操作是非常重要的。
我们可以使用命令“ls”来查看当前目录下的文件和目录,使用命令“cd”来切换目录,使用命令“mkdir”来创建新的目录,使用命令“rm”来删除文件或目录。
实验三:文件编辑在Linux系统中,我们可以使用命令行工具来编辑文件。
比较常用的编辑器有vi和nano。
我们可以使用命令“vi”或“nano”来打开文件进行编辑,然后保存并退出。
实验四:用户和权限管理Linux系统中的用户和权限管理也是非常重要的。
我们可以使用命令“useradd”来添加新用户,使用命令“passwd”来修改用户密码,使用命令“chmod”来修改文件或目录的权限。
实验五:系统管理最后,我们还可以使用一些命令来管理系统。
比如使用命令“ps”来查看当前系统进程,使用命令“top”来查看系统资源占用情况,使用命令“shutdown”来关闭系统。
通过以上实验,我们可以初步了解Linux系统的基本操作。
当然,Linux系统还有很多其他的功能和命令,需要我们不断学习和实践。
希望大家能够通过实践不断提升自己的Linux操作技能,为今后的工作和学习打下坚实的基础。
Linux系统编程实验三:文件编程

实验三:文件编程●实验目的:学会创建文件,并制定文件访问属性学会使用C库函数和Linux系统调用,并理解他们的区别●实验要求:(一)编写应用程序,创建一可读可写的文件(二)使用库函数,实现文件copy的功能●实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台●实验步骤:(一)文件创建}2、编译应用程序file_creat.c用gcc命令编译file_create.c后生成可执行文件file_creat3、运行应用程序运行了该程序后,大家可以发现在当前目录下产生了test.txt文件4、该实验让大家学习怎样用Linux的系统调用创建一个文件,并设置文件的访问属性,文件操作时Linux应用编程的基础(二)文件拷贝#include <string.h>#include <strings.h>#include <stdio.h>#include <stdlib.h>#define BUFFER_SIZE 1024int main(int argc,char **argv){FILE *from_fd;FILE *to_fd;long file_len=0;char buffer[BUFFER_SIZE];char *ptr;/*判断入参*/if(argc!=3){printf("Usage:%s fromfile tofile\n",argv[0]);exit(1);}/* 打开源文件*/if((from_fd=fopen(argv[1],"rb"))==NULL){printf("Open %s Error\n",argv[1]);exit(1);}/* 创建目的文件*/if((to_fd=fopen(argv[2],"wb"))==NULL){printf("Open %s Error\n",argv[2]);exit(1);}/*测得文件大小*/fseek(from_fd,0L,SEEK_END);file_len=ftell(from_fd);fseek(from_fd,0L,SEEK_SET);printf("from file size is=%d\n",file_len);/*进行文件拷贝*/while(!feof(from_fd)){fread(buffer,BUFFER_SIZE,1,from_fd);if(BUFFER_SIZE>=file_len){fwrite(buffer,file_len,1,to_fd);}else{fwrite(buffer,BUFFER_SIZE,1,to_fd);file_len=file_len-BUFFER_SIZE;}//写入完成后清空缓冲区memset(buffer,0,BUFFER_SIZE);}fclose(from_fd);fclose(to_fd);exit(0);}2、编译应用程序file_cp.c3、运行应用程序我们将file_cp.c拷贝为test.c,可以看到运行程序后文件夹出现了test.c和file_cp.c大小和内容都一样4、要注意区分C库函数和Linux系统调用对文件操作的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:文件编程●实验目的:学会创建文件,并制定文件访问属性学会使用C库函数和Linux系统调用,并理解他们的区别●实验要求:(一)编写应用程序,创建一可读可写的文件(二)使用库函数,实现文件copy的功能●实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台●实验步骤:(一)文件创建1、编写实验代码file_creat.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>void create_file(char *filename){/*创建的文件具有可读可写的属性*/if(creat(filename,0666)<0){printf("create file %s failure!\n",filename);exit(EXIT_FAILURE);}else{printf("create file %s success!\n",filename);}}int main(int argc,char *argv[]){/*判断入参有没有传入文件名*/if(argc<2){printf("you haven't input the filename,please try again!\n");exit(EXIT_FAILURE);}create_file(argv[1]);exit(EXIT_SUCCESS);}2、编译应用程序file_creat.c用gcc命令编译file_create.c后生成可执行文件file_creat3、运行应用程序运行了该程序后,大家可以发现在当前目录下产生了test.txt文件4、该实验让大家学习怎样用Linux的系统调用创建一个文件,并设置文件的访问属性,文件操作时Linux应用编程的基础(二)文件拷贝1、编写实验代码file_cp.c#include <string.h>#include <strings.h>#include <stdio.h>#include <stdlib.h>#define BUFFER_SIZE 1024int main(int argc,char **argv){FILE *from_fd;FILE *to_fd;long file_len=0;char buffer[BUFFER_SIZE];char *ptr;/*判断入参*/if(argc!=3){printf("Usage:%s fromfile tofile\n",argv[0]);exit(1);}/* 打开源文件*/if((from_fd=fopen(argv[1],"rb"))==NULL){printf("Open %s Error\n",argv[1]);exit(1);}/* 创建目的文件*/if((to_fd=fopen(argv[2],"wb"))==NULL){printf("Open %s Error\n",argv[2]);exit(1);}/*测得文件大小*/fseek(from_fd,0L,SEEK_END);file_len=ftell(from_fd);fseek(from_fd,0L,SEEK_SET);printf("from file size is=%d\n",file_len);/*进行文件拷贝*/while(!feof(from_fd)){fread(buffer,BUFFER_SIZE,1,from_fd);if(BUFFER_SIZE>=file_len){fwrite(buffer,file_len,1,to_fd);}else{fwrite(buffer,BUFFER_SIZE,1,to_fd);file_len=file_len-BUFFER_SIZE;}//写入完成后清空缓冲区memset(buffer,0,BUFFER_SIZE);}fclose(from_fd);fclose(to_fd);exit(0);}2、编译应用程序file_cp.c3、运行应用程序我们将file_cp.c拷贝为test.c,可以看到运行程序后文件夹出现了test.c和file_cp.c大小和内容都一样4、要注意区分C库函数和Linux系统调用对文件操作的方法。
比如C库函数fread就没有像Linux系统调用read函数那样返回成功读取了多少个字节,只有清楚了他们之间的的区别我们才好熟练运用他们上机报告要求:编写一应用程序实现如下功能:使用open()函数创建一个名为file.txt,权限为666的文件;并向其中写入字符串“hello world”,然后使用read()函数把写入的内容读取出来并在终端上显示输出。
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>int main() {int fd = -1;fd = open("zhidao_561804018.dat", O_CREAT | O_TRUNC | O_RDWR, 0666);if (fd < 0) {perror("open");return -1;}char buff[64];strcpy(buff, "Hello!I am writing to this file!");int count = strlen(buff);if (write(fd, buff, count) < 0) {perror("write");return -1;}if (lseek(fd, 0, SEEK_SET) < 0) {perror("lseek");return -1;}if (read(fd, buff, 10) < 0) {perror("read");return -1;}buff[10] = 0x00;printf("%s\n", buff);if (fd > 0) {close(fd);fd = -1;}return 0;}分别写出open(),read(),write(),close()函数的函数原型,功能,返回值,函数参数的意义。
1. open()函数功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。
所需头文件:#include <sys/types.h>,#include <sys/stat.h>,#include <fcntl.h>函数原型:int open(const char *pathname,int flags,int perms)参数:pathname:被打开的文件名(可包括路径名如"dev/ttyS0")flags:文件打开方式,O_RDONL Y:以只读方式打开文件O_WRONL Y:以只写方式打开文件O_RDWR:以读写方式打开文件O_CREAT:如果改文件不存在,就创建一个新的文件,并用第三个参数为其设置权限O_EXCL:如果使用O_CREAT时文件存在,则返回错误消息。
这一参数可测试文件是否存在。
此时open是原子操作,防止多个进程同时创建同一个文件O_NOCTTY:使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制终端O_TRUNC:若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,即将写入的数据添加到文件的末尾O_NONBLOCK: 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非阻塞方式。
O_SYNC:使每次write都等到物理I/O操作完成。
O_RSYNC:read 等待所有写入同一区域的写操作完成后再进行在open()函数中,falgs参数可以通过“|”组合构成,但前3个标准常量(O_RDONL Y,O_WRONL Y,和O_RDWR)不能互相组合。
perms:被打开文件的存取权限,可以用两种方法表示,可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH),其中R/W/X表示读写执行权限,USR/GRP/OTH分别表示文件的所有者/文件所属组/其他用户,如S_IRUUR|S_IWUUR|S_IXUUR,(-rex------),也可用八进制800表示同样的权限返回值:成功:返回文件描述符失败:返回-12. close()函数功能描述:用于关闭一个被打开的的文件所需头文件: #include <unistd.h>函数原型:int close(int fd)参数:fd文件描述符函数返回值:0成功,-1出错3. read()函数功能描述:从文件读取数据。
所需头文件: #include <unistd.h>函数原型:ssize_t read(int fd, void *buf, size_t count);参数:fd:将要读取数据的文件描述词。
buf:指缓冲区,即读取的数据会被放到这个缓冲区中去。
count:表示调用一次read操作,应该读多少数量的字符。
返回值:返回所读取的字节数;0(读到EOF);-1(出错)。
以下几种情况会导致读取到的字节数小于 count :A. 读取普通文件时,读到文件末尾还不够 count 字节。
例如:如果文件只有30 字节,而我们想读取100字节,那么实际读到的只有30 字节,read 函数返回30 。
此时再使用read 函数作用于这个文件会导致read 返回0 。
B. 从终端设备(terminal device)读取时,一般情况下每次只能读取一行。