linux实验报告_大三上Word格式.doc

上传人:聆听****声音 文档编号:805676 上传时间:2023-04-29 格式:DOC 页数:32 大小:229.07KB
下载 相关 举报
linux实验报告_大三上Word格式.doc_第1页
第1页 / 共32页
linux实验报告_大三上Word格式.doc_第2页
第2页 / 共32页
linux实验报告_大三上Word格式.doc_第3页
第3页 / 共32页
linux实验报告_大三上Word格式.doc_第4页
第4页 / 共32页
linux实验报告_大三上Word格式.doc_第5页
第5页 / 共32页
linux实验报告_大三上Word格式.doc_第6页
第6页 / 共32页
linux实验报告_大三上Word格式.doc_第7页
第7页 / 共32页
linux实验报告_大三上Word格式.doc_第8页
第8页 / 共32页
linux实验报告_大三上Word格式.doc_第9页
第9页 / 共32页
linux实验报告_大三上Word格式.doc_第10页
第10页 / 共32页
linux实验报告_大三上Word格式.doc_第11页
第11页 / 共32页
linux实验报告_大三上Word格式.doc_第12页
第12页 / 共32页
linux实验报告_大三上Word格式.doc_第13页
第13页 / 共32页
linux实验报告_大三上Word格式.doc_第14页
第14页 / 共32页
linux实验报告_大三上Word格式.doc_第15页
第15页 / 共32页
linux实验报告_大三上Word格式.doc_第16页
第16页 / 共32页
linux实验报告_大三上Word格式.doc_第17页
第17页 / 共32页
linux实验报告_大三上Word格式.doc_第18页
第18页 / 共32页
linux实验报告_大三上Word格式.doc_第19页
第19页 / 共32页
linux实验报告_大三上Word格式.doc_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

linux实验报告_大三上Word格式.doc

《linux实验报告_大三上Word格式.doc》由会员分享,可在线阅读,更多相关《linux实验报告_大三上Word格式.doc(32页珍藏版)》请在冰点文库上搜索。

linux实验报告_大三上Word格式.doc

exit

(1);

}

fd1=open(argv[1],O_RDONLY);

if(fd1==-1)

file%scannotopened\n"

argv[1]);

exit

(1);

}

fd2=open(argv[2],O_RDWR|O_CREAT);

if(fd2==-1)

Cannotopenfile%s\n"

argv[2]);

while

(1)

i=read(fd1,buf,bufsize);

write(fd2,buf,i);

if(i!

=bufsize)break;

close(fd1);

close(fd2);

return0;

Linux环境下运行情况如下:

road@ubuntu:

~/桌面/work$gcc-ocpcp.c

~/桌面/work$./cp

argumenterror

Pleaseuse:

cpfile1file2

~/桌面/work$./cpab

其中,a为一文件,b为空文件。

2.编写程序mycat.c,实现文件内容的显示,用原始文件系统调用实现。

通过main函数从键盘输入命令行

Argc=2?

No重新输入命令行

fd=open(argv[1],O_RDONLY)

不等于1报错

while((num=read(fd,buffer,99))>

0)

buffer[num]='

\0'

;

printf("

%s"

buffer);

实验源代码如下:

//mycat.c

#include<

unistd.h>

intmain(intargc,char*argv[])

intfd;

charbuffer[100];

intnum;

if(argc!

=2)

{

printf("

usage:

%sfilename\n"

argv[0]);

return1;

}

if((fd=open(argv[1],O_RDONLY))==-1)

perror("

cannotopenthefile"

while((num=read(fd,buffer,99))>

buffer[num]='

close(fd);

return0;

~/桌面/work$gcc-omycatmycat.c

~/桌面/work$./mycat

./mycatfilename

~/桌面/work$./mycata

iamroad!

!

~/桌面/work$

其中,a为一个文件名。

3.1用流文件系统函数重新编写上面的程序。

用main命令输入命令行:

fcpfilename1filename2

不为3,提示

fd1=fopen(argv[1],"

r"

打开第一个文件读出数据

fd2=fopen(argv[2],"

w"

打开第二个文件写入数据

fread(&

buffer,sizeof(char),1,fd1);

fwrite(&

buffer,sizeof(char),1,fd2);

把第一个文件写入第二个文件

关闭两个文件描述符

用流文件写的文件复制功能函数:

//fcp.c

FILE*fd1,*fd2;

charbuffer[20];

{

printf("

%sfilename1filename2\n"

return1;

}

fd1=fopen(argv[1],"

if(fd1==NULL)

printf("

return1;

fd2=fopen(argv[2],"

return1;

while(!

feof(fd1))

fread(&

}

fclose(fd1);

fclose(fd2);

return0;

运行情况如下:

~/桌面/work$gcc-ofcpfcp.c

fcp.c:

Infunction‘main’:

25:

warning:

comparisonbetweenpointerandinteger

~/桌面/work$./fcpab

3.2用流文件编写显示函数:

流程图:

用main函数键入命令行:

myfcatfilename

argc=2?

NO

重新输入

Yes

打开文件以备读入数据

while(!

不满足条件

fscanf(fd1,"

%c"

&

buffer);

显示文件内容

关闭文件并退出

源程序代码:

//myfcat.c

FILE*fd1;

charbuffer;

printf("

return1;

printf("

return1;

fscanf(fd1,"

fclose(fd1);

~/桌面/work$gcc-omyfcatmyfcat.c

~/桌面/work$./myfcata

程序把文件a的内容显示出来了:

4.调用目录函数,编写程序myls.c,实现按下面格式显示当前目录文件列表:

文件名 文件大小文件创建时间

注意研究文件创建时间的转换,注意研究asctime()函数和ctime()函数的用法。

流程图如下:

用main函数输入命令行:

myls

dp=opendir("

./"

打开当前目录

dp!

=NULL

继续

while(ep=readdir(dp))

读出当前目录的文件

stat(ep->

d_name,&

dup);

获得详细信息

puts(ep->

d_name);

%u"

dup.st_size);

%s"

ctime(&

dup.st_atime));

打印出文件名、文件大小、创建时间

程序代码如下:

//myls.c

stddef.h>

dirent.h>

intmain(void)

DIR*dp;

structdirent*ep;

structstatdup;

dp=opendir("

if(dp!

=NULL)

{

while(ep=readdir(dp))

{puts(ep->

stat(ep->

printf("

}

closedir(dp);

else

puts("

Couldn'

topenthedirectory.\n"

return0;

运行结果:

列出了当前目录的所有文件的名称、大小和创建时间

~/桌面/work$gcc-omylsmyls.c

myls.c:

18:

format‘%u’expectstype‘unsignedint’,butargument2hastype‘__off_t’

19:

format‘%s’expectstype‘char*’,butargument2hastype‘int’

~/桌面/work$./myls

server2.c~

947SatJan917:

422010

pipol.c

324FriJan822:

47:

212010

newls.c

498FriJan822:

getip.c~

635FriJan822:

38:

402010

network1.c

1552SatJan915:

28:

092010

server2

8493SatJan917:

132010

程序打印出了当前目录所有文件的名称、文件大小和创建时间。

实验四进程实验

1.编写程序,显示所有环境变量的名称和值。

程序源代码:

//environ.c

stdlib.h>

intmain()

char**ch;

externchar**environ;

ch=environ;

while(*ch)

{

printf("

%s\n"

*ch);

ch++;

return0;

2.*编写程序,模仿讲义上的mysystem程序,实现输入命令的执行。

mysystemshell

pid=fork();

创建进程

execl(SHELL,SHELL,"

-c"

command,NULL);

用Shell命令替换父进程

waitpid(pid,&

status,0)

子进程等待

//mysystem.c

sys/wait.h>

#defineSHELL"

/bin/sh"

intmysystem(constchar*command)

intstatus;

pid_tpid;

pid=fork();

if(pid==0)

execl(SHELL,SHELL,"

_exit(EXIT_FAILURE);

elseif(pid<

status=-1;

else

if(waitpid(pid,&

status,0)!

=pid)

status=-1;

returnstatus;

mysystem(argv[1]);

其中用了Shell中的ls命令,列出了当前目录的所有文件

~/桌面/work$gcc-omysystemmysystem.c

~/桌面/work./mysystemls

a fifo_channel4 mycat.c~myls.c~ netsever.cread.c

a~ fmycat.c myfcat my_sg_get netsever.c~server

b getip.c myfcat.cmy_sg_get.c networkserver2

b~ getip.c~ myfcat.c~my_sg_get.c~network1server2.c

close.cipop.c myfifo.cmysystem network1.cserver2.c~

cp kill.c~ mykill mysystem.c network1.c~server.c

cp.c ls.c mykill.cmysystem.c~ network.cserver.c~

cp.c~ my mykill.c~netclt network.c~showev.c

fcp my.c mylist.cnetclt.c newls.ctcpk.txt

fcp.c mycat myls netclt.c~ open.ctcp.txt

fcp.c~ mycat.c myls.c netsever pipol.cwrite.c

~/桌面/work$

实验五命名管道实验

1.研究mkfifo命令,在当前目录下创建一个myfifo的命名管道。

在终端中输入:

mkfifofifo_channel,然后用ls命令查看当前目录是否产生了名为fifo_channel的管道。

~/桌面/work$mkfifofifo_channel

~/桌面/work$ls

afifo_channelmycat.c~myls.c~netsever.cread.c

a~fmycat.cmyfcatmy_sg_getnetsever.c~server

bgetip.cmyfcat.cmy_sg_get.cnetworkserver2

b~getip.c~myfcat.c~my_sg_get.c~network1server2.c

close.cipop.cmyfifo.cmysystemnetwork1.cserver2.c~

cpkill.c~mykillmysystem.cnetwork1.c~server.c

cp.cls.cmykill.cmysystem.c~network.cserver.c~

cp.c~mymykill.c~netcltnetwork.c~showev.c

fcpmy.cmylist.cnetclt.cnewls.ctcpk.txt

fcp.cmycatmylsnetclt.c~open.ctcp.txt

fcp.c~mycat.cmyls.cnetseverpipol.cwrite.c

2.用mkfifo()函数实现相同的功能。

//mk_fifo.c

#defineFIFO_CHANNEL"

./fifo_channel1"

//创建命名管道

if(mkfifo(FIFO_CHANNEL,0777)==-1)

cannotcreatFIFOchannel"

用ls命令查看可知产生了fifo_channel1的管道。

~/桌面/work$gcc-omk_fifomk_fifo.c

~/桌面/work$./mk_fifo

afifo_channel1mycatmyls.cnetsever.cserver

a~fmycat.cmycat.cmyls.c~netsever.c~server2

bgetip.cmycat.c~my_sg_getnetworkserver2.c

b~getip.c~myfcatmy_sg_get.cnetwork1server2.c~

close.cipop.cmyfcat.cmy_sg_get.c~network1.cserver.c

cpkill.c~myfcat.c~mysystemnetwork1.c~server.c~

cp.cls.c

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动物植物

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

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