【Linux基础】不带缓存的IO操作

不带缓存的IO操作又称底层IO操作。文件底层I/O操作的系统调用主要用到5个函数:open()、close()、read()、write()、lseek()。这些函数的特点是不带缓存,直接对文件进行操作。
虽然不带缓存的文件IO操作程序不能移植到非POSIX标准的系统(如Windows系统)上去,但是在嵌入式程序设计、TCP/IP的Socekt套接字程序设计、多路IO操作程序设计等方面应用广泛。因此,不带缓存的文件IO程序设计是Linux文件操作程序设计的重点。

01.jpg (14.33 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

02.jpg (99.66 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

03.jpg (24.61 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

04.jpg (32.76 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

05.jpg (32.46 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

06.jpg (46.26 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

7 天前 上传

3. 使用实例
程序功能:设计一个程序,要求从一个源文件src_file(如不存在则创建)中读取倒数第二个10KB数据并复制到目标文件dest_file。
程序说明:
程序代码:
/* copy_file.c */
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 1024 /* 每次读写缓存大小,影响运行效率*/
#define SRC_FILE_NAME "src_file" /* 源文件名 */
#define DEST_FILE_NAME "dest_file" /* 目标文件名文件名 */
#define OFFSET 20480 /* 拷贝的数据大小 */
int main()
{
int src_file, dest_file;
unsigned char buff[BUFFER_SIZE];
int real_read_len;
int flag=10;
/* 以只读方式打开源文件 */
src_file = open(SRC_FILE_NAME, O_RDONLY);
/* 以只写方式打开目标文件,若此文件不存在则创建, 访问权限值为644 */
dest_file = open(DEST_FILE_NAME,
O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if (src_file < 0 || dest_file < 0)
{
printf("Open file error\n");
exit(1);
}
/* 将源文件的读写指针移到最后20KB的起始位置*/
lseek(src_file, -OFFSET, SEEK_END);
/* 读取源文件的最后20KB数据并写到目标文件中,每次读写1KB,读取10 */
while ((real_read_len = read(src_file, buff,
sizeof(buff))) > 0||flag>0)
{
flag--;
write(dest_file, buff, real_read_len);
}
close(dest_file);
close(src_file);
return 0;
}
结果:
# ./copy_file
# ls –lh dest_file
 
本文转载于唯C教育,【Linux基础】不带缓存的IO操作
http://www.weicedu.com/forum.php?mod=viewthread&tid=100&fromuid=4
(出处: http://www.weicedu.com/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值