系统调用方式文件编程Word文件下载.docx
- 文档编号:16867643
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:17.49KB
系统调用方式文件编程Word文件下载.docx
《系统调用方式文件编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《系统调用方式文件编程Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
在Linux系统中,每一个打开的文件,都对应一个数字,通过这个唯一的数字,可以找到这个打开的文件,并对其进行操作,比如读、写等。
二首先学习系统调用方式提供的函数——
4学习以下7个函数——
打开文件创建文件关闭文件读文件写文件文件定位
复制文件描述符
5打开文件——open
范例1:
打开已经存的文件open.c
#include<
sys/types.h>
sys/stat.h>
fcntl.h>
voidmain()
{
intfd;
/*文件描述符*/
fd=open("
/home/test.c"
O_RDWR);
if(fd<
0)
printf("
Openfilefali!
\n"
);
else
Openfilesucessfully!
}
范例2:
利用open函数创建新文件open_creat.c
/home/test1.c"
O_RDWR|O_CREAT,0755);
6创建文件——creat
在《》一书中,找到函数名
利用mancreat查找函数的帮助文件
编写程序代码——
unistd.h>
fd=creat("
/home/test2.c"
0621);
createfilefail!
Createfilesuccessfully!
7在《》一书中,找到函数名
manclose查找函数原型
编写程序代码close.c
intret;
ret=close(fd);
if(ret==0)
Filehasbeenclosed!
Failtoclose!
8首先查找一下读文件的函数read()
man所查询的是一个手册,首先从章节一里面找关键字,如果没有找到,再到后续章节中找。
man2read
man章节一命令
章节二系统调用
章节三库函数
范例:
charbuf[10];
/*定义一个数组,有10个空间;
用来存放读取出的数据*/
ssize_tcount;
count=read(fd,buf,5);
/*将读取出的字符存放到buf指向的空间里面。
*/
if(count==-1)
Readfail!
"
Read%dBytes.\n"
count);
buf[5]='
\0'
;
/*这样,读取后的内容无乱码字符出现。
bufis%s.\n"
buf);
/*打印字符串*/
9写文件
找到写文件对应的函数write()
man2write
write.c
char*buf="
987654321"
count=write(fd,buf,7);
Writefail!
Write%dBytes.\n"
Theoriginalbufis%s.\n"
10定位文件
lseek()
在此之前,先实验一下,能否在文件写入之后,直接读取刚才写入的内容?
实验验证,没有读到数据。
这就是我们要给大家介绍的文件读写指针。
当打开文件时,指针位于文件头部,然而,当对文件进行读或者写操作后,文件指针将发生变化。
介绍,如何设置指针的位置。
stdio.h>
off_tref;
ref=lseek(fd,0,SEEK_SET);
if(ref==-1)
Failtoshift.\n"
Thedistancetofile_headis%dBytes.\n"
ref);
charbuf_r[10];
ssize_tcount_r;
count_r=read(fd,buf_r,5);
if(count_r==-1)
count_r);
buf_r[5]='
/*这样,读取后的内容无乱码出现。
buf_ris%s.\n"
buf_r);
/*打印读出的字符串*/
11复制文件描述符dup()
可以利用新复制的文件描述符fd_new来操作oldfd所指定的文件。
就好比一个人有两个身份证号码。
/*利用dup()函数复制后的文件描述符不同于原来的,但共同指向同一个文件*/
dup.c
intnewfd;
newfd=dup(fd);
if(newfd==-1)
Failtocopytheoldfd.\n"
Thenewfdis%d.\n"
newfd);
count_r=read(newfd,buf_r,5);
{
printf("
Theoldfdandthenewfdare%d&
%d.\n"
fd,newfd);
}
13综合实例——编写文件复制程序
cp参数1参数2
源文件、目标文件
将源文件的所有内容复制到目标文件中;
思路:
打开源文件,打开目标文件;
读取源文件的数据,将数据写入目标文件;
openreadwrite
查阅编写的函数手册。
源文件是什么、目标文件是什么?
通过main()函数的参数传进去。
编写文件复制程序——copy.c
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))>
/*将读取出的源文件数据写入目标文件*/
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本地文档,与本特定系统有关的。
要查属于哪一部分的,就用哪一部分的编号在命令之前。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 调用 方式 文件 编程