系统调用方式文件编程题库.docx

上传人:b****8 文档编号:28827107 上传时间:2023-07-20 格式:DOCX 页数:15 大小:17.44KB
下载 相关 举报
系统调用方式文件编程题库.docx_第1页
第1页 / 共15页
系统调用方式文件编程题库.docx_第2页
第2页 / 共15页
系统调用方式文件编程题库.docx_第3页
第3页 / 共15页
系统调用方式文件编程题库.docx_第4页
第4页 / 共15页
系统调用方式文件编程题库.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

系统调用方式文件编程题库.docx

《系统调用方式文件编程题库.docx》由会员分享,可在线阅读,更多相关《系统调用方式文件编程题库.docx(15页珍藏版)》请在冰豆网上搜索。

系统调用方式文件编程题库.docx

系统调用方式文件编程题库

Linux文件编程函数

一简述几个基本知识——

1Linux应用程序编程所用到的函数,主要有两种方式提供:

系统调用方式函数库方式

2如何学习这些函数?

三步学习法:

第一步:

借助工具书,查找函数名;《Unix环境高级编程》

第二步:

在Linux系统中,利用man命令查看函数信息,并填写函数学习手册。

第三步:

实践,编写代码。

3VI概念——文件描述符

性质:

一个数字

特别含义:

其功能类似于身份证号码,通过身份证号码,可以将对应的公民;在Linux系统中,每一个打开的文件,都对应一个数字,通过这个唯一的数字,可以找到这个打开的文件,并对其进行操作,比如读、写等。

二首先学习系统调用方式提供的函数——

4学习以下7个函数——

打开文件创建文件关闭文件读文件写文件文件定位

复制文件描述符

5打开文件——open

范例1:

打开已经存的文件open.c

#include

#include

#include

voidmain()

{

intfd;/*文件描述符*/

fd=open("/home/test.c",O_RDWR);

if(fd<0)

printf("Openfilefali!

\n");

else

printf("Openfilesucessfully!

\n");

}

范例2:

利用open函数创建新文件open_creat.c

#include

#include

#include

voidmain()

{

intfd;/*文件描述符*/

fd=open("/home/test1.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("Openfilefali!

\n");

else

printf("Openfilesucessfully!

\n");

}

6创建文件——creat

在《》一书中,找到函数名

利用mancreat查找函数的帮助文件

编写程序代码——

#include

#include

#include

#include

voidmain()

{

intfd;

fd=creat("/home/test2.c",0621);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

}

7在《》一书中,找到函数名

manclose查找函数原型

编写程序代码close.c

#include

#include

#include

#include

voidmain()

{

intfd;

fd=open("/home/test2.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

intret;

ret=close(fd);

if(ret==0)

printf("Filehasbeenclosed!

\n");

else

printf("Failtoclose!

\n");

}

8首先查找一下读文件的函数read()

man所查询的是一个手册,首先从章节一里面找关键字,如果没有找到,再到后续章节中找。

man2read

man章节一命令

章节二系统调用

章节三库函数

范例:

#include

voidmain()

{

intfd;

fd=open("/home/test1.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

charbuf[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/

ssize_tcount;

count=read(fd,buf,5);/*将读取出的字符存放到buf指向的空间里面。

*/

if(count==-1)

printf("Readfail!

");

else

printf("Read%dBytes.\n",count);

buf[5]='\0';/*这样,读取后的内容无乱码字符出现。

*/

printf("bufis%s.\n",buf);/*打印字符串*/

intret;

ret=close(fd);

if(ret==0)

printf("Filehasbeenclosed!

\n");

else

printf("Failtoclose!

\n");

}

9写文件

找到写文件对应的函数write()

man2write

write.c

#include

#include

#include

#include

voidmain()

{

intfd;

fd=open("/home/test2.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

char*buf="987654321";

ssize_tcount;

count=write(fd,buf,7);

if(count==-1)

printf("Writefail!

");

else

printf("Write%dBytes.\n",count);

printf("Theoriginalbufis%s.\n",buf);

intret;

ret=close(fd);

if(ret==0)

printf("Filehasbeenclosed!

\n");

else

printf("Failtoclose!

\n");

}

10定位文件

lseek()

在此之前,先实验一下,能否在文件写入之后,直接读取刚才写入的内容?

实验验证,没有读到数据。

这就是我们要给大家介绍的文件读写指针。

当打开文件时,指针位于文件头部,然而,当对文件进行读或者写操作后,文件指针将发生变化。

介绍,如何设置指针的位置。

范例:

#include

#include

#include

#include

#include

voidmain()

{

intfd;

fd=open("/home/test2.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

char*buf="987654321";

ssize_tcount;

count=write(fd,buf,7);

if(count==-1)

printf("Writefail!

");

else

printf("Write%dBytes.\n",count);

printf("Theoriginalbufis%s.\n",buf);

off_tref;

ref=lseek(fd,0,SEEK_SET);

if(ref==-1)

printf("Failtoshift.\n");

else

printf("Thedistancetofile_headis%dBytes.\n",ref);

charbuf_r[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/

ssize_tcount_r;

count_r=read(fd,buf_r,5);/*将读取出的字符存放到buf指向的空间里面。

*/

if(count_r==-1)

printf("Readfail!

");

else

printf("Read%dBytes.\n",count_r);

buf_r[5]='\0';/*这样,读取后的内容无乱码出现。

*/

printf("buf_ris%s.\n",buf_r);/*打印读出的字符串*/

intret;

ret=close(fd);

if(ret==0)

printf("Filehasbeenclosed!

\n");

else

printf("Failtoclose!

\n");

}

11复制文件描述符dup()

可以利用新复制的文件描述符fd_new来操作oldfd所指定的文件。

就好比一个人有两个身份证号码。

/*利用dup()函数复制后的文件描述符不同于原来的,但共同指向同一个文件*/

范例:

dup.c

#include

#include

#include

#include

#include

voidmain()

{

intfd;

fd=open("/home/test2.c",O_RDWR|O_CREAT,0755);

if(fd<0)

printf("createfilefail!

\n");

else

printf("Createfilesuccessfully!

\n");

char*buf="987654321";

ssize_tcount;

count=write(fd,buf,7);

if(count==-1)

printf("Writefail!

");

else

printf("Write%dBytes.\n",count);

printf("Theoriginalbufis%s.\n",buf);

off_tref;

ref=lseek(fd,0,SEEK_SET);

if(ref==-1)

printf("Failtoshift.\n");

else

printf("Thedistancetofile_headis%dBytes.\n",ref);

intnewfd;

newfd=dup(fd);

if(newfd==-1)

printf("Failtocopytheoldfd.\n");

else

printf("Thenewfdis%d.\n",newfd);

charbuf_r[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/

ssize_tcount_r;

count_r=read(newfd,buf_r,5);/*将读取出的字符存放到buf指向的空间里面。

*/

if(count_r==-1)

printf("Readfail!

");

else

printf("Read%dBytes.\n",count_r);

buf_r[5]='\0';/*这样,读取后的内容无乱码出现。

*/

printf("buf_ris%s.\n",buf_r);/*打印读出的字符串*/

intret;

ret=close(fd);

if(ret==0)

{

printf("Filehasbeenclosed!

\n");

printf("Theoldfdandthenewfdare%d&%d.\n",fd,newfd);

}

else

printf("Failtoclose!

\n");

}

13综合实例——编写文件复制程序

cp参数1参数2

源文件、目标文件

将源文件的所有内容复制到目标文件中;

思路:

打开源文件,打开目标文件;

读取源文件的数据,将数据写入目标文件;

openreadwrite

查阅编写的函数手册。

源文件是什么、目标文件是什么?

通过main()函数的参数传进去。

编写文件复制程序——copy.c

#include

#include

#include

#include

#include

voidmain(intargc,char**argv)/*argv[0]存放命令的名字,argv[1]存放参数1,argv[2]存放参数2*/

{

/*打开源文件*/

intfd_s;

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

/*打开目标文件*/

intfd_d;

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

/*读取源文件数据*/

/*考虑当读取的数据量很大*/

charbuf[512];

intcount=0;/*实际读取的数据量*/

while((count=read(fd_s,buf,512))>0)

{

/*将读取出的源文件数据写入目标文件*/

write(fd_d,buf,count);

}

/*关闭*/

close(fd_s);

close(fd_d);

}

/****************

运行时,是如何执行的?

答:

./copy/home/test2.c/home/test3.c

********************************************/

中间的数字是什么意思呢?

是man的分卷号,原来man分成很多部分,分别是:

 

1用户命令,可由任何人启动的。

2系统调用,即由内核提供的函数。

3例程,即库函数,比如标准C库libc。

4设备,即/dev目录下的特殊文件。

5文件格式描述,例如/etc/passwd。

6游戏,不用解释啦!

7杂项,例如宏命令包、惯例等。

8系统管理员工具,只能由root启动。

9其他(Linux特定的),用来存放内核例行程序的文档。

n新文档,可能要移到更适合的领域。

o老文档,可能会在一段期限内保留。

l本地文档,与本特定系统有关的。

 

     要查属于哪一部分的,就用哪一部分的编号在命令之前。

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1