文件IO和标准IO
2015.2.26
星期四,阴天
今天的内容主要是文件IO
man 手册的分册:
man -f open 查看那些分册中有open
man 1 -- 普通的命令程序
man 2 -- 系统调用
man 3 -- 库函数
文件:操作系统将硬件抽象成文件
输入:将设备中的数据写进到内存
输出:将内存中的数据写出到设备
Linux的文件系统由两层结构构成:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统
posix:可移植操作系统接口规范
API:用户编程接口
应用通过POSIX和GNU C LIB 变成 系统调用(可以访问系统):称这个接口为库函数
应用直接访问系统:系统调用
上层要访问系统需要先通过系统调用,
出错处理:
strerror():映射errno对应的错误信息:strerror(errno) ,error是全局变量
prerror();输出用户信息及errno对应的错误信息
printf("file to open:%s\n", strerror(error))
perror("file to open:")
上面两条语句的功能想同:file to open: no such file directory (后面的提示语句和程序功能相关)
Linux中文件主要分为6种:普通文件,目录文件,符号链接文件,管道文件,套接字文件和设备文件。
不带缓存的IO:文件IO
带缓存的IO:标准IO
写出去:Output
读进来:Input(相对于程序而言)
open();read();write():
需要包含下面几个头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
标准IO:封装了文件描述符和缓存机制
fseek和ftell == lseek;
文件IO的函数:
open(),read(),write(),lseek(),close();
当总字节数大于每次读写的字节数的时候,判断是否读写完成有两种简单的判别方法;
1.累加:(设总字节数=MAX)
while((nbyte = write(fd, buf, N)) > 0)
{
sum += nbyte;
if(sum == MAX)
{
break;
}
}
2.判读实际读到的字节数和设置的读字节数是否相等
while(1)
{
i = read(fd, buf, N);
write(fd, buf, i);
if(i != N)
{
break;
}
}
off_t lseek(int fd, off_t offset, int whence)
offset:相对于基点whence的偏移量,以字节为单位,正数表示向前移动,负数表示向后移动
获得文件的长度:
length = lseek(fd, 0, SEEK_END)//备注几个宏(SEEK_SET , SEEK_CUR , SEEK_END)
标准IO;
fopen(),fread(),fwrite(),fseek(),ftell(),fprintf(),fclose();
求文件的长度:fseek()和ftell()两个函数组合的程序功能相当于lseek();
FILE *fp;
if(fseek(fp, 0, SEEK_END) < 0)
{
perror("fseek error");
fclose(fp);
retrn 1;
}
length = ftell(fp);
求文件长度完整程序:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
int main(int atgc, char *argv[])
{
FILE *fp;
long length;
if(argc < 2)
{
fprintf(stdout,"usage: %s filename\n",argv[0]);
return 1;
}
if((fp = fopen(argv[1],"r")) == NULL)
{
fprintf(stderr,"fopen error: %s",strerror(erron));
return 1;
}
if(fseek(fp, 0, SEEK_END) < 0)
{
perror("fseek error");
fclose(fp);
return 1;
}
lingth = ftell(fp);
printf("the fiel size is %ld\n",length);
fclose(fp);
return 0;
}
***************************************************************************************************************************************************************
***************************************************************************************************************************************************************
**************************o*************************************************************************************************************************************
***************************************************************************************************************************************************************
文件IO和标准IO的更多相关文章
- 文件IO和标准IO的区别【转】
一.先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都调用内核中的一个系统调用.也就是一般所 ...
- 文件IO与标准IO的区别
文件IO与标准IO的区别 文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作,文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立 ...
- 8 . IO类-标准IO、文件IO、stringIO
8.1 IO类 #include <iostream> //标准IO头文件 8.2 文件输入输出流 #include <fstream> //读写文件头文件 std::fst ...
- linux文件io与标准io
文件IO实际是API,Linux对文件操作主要流程为:打开(open),操作(write.read.lseek),关闭(close). 1.打开文件函数open(): 涉及的头文件: #includ ...
- 系统调用IO和标准IO
目录 1. 系统调用IO(无缓冲IO) 系统调用 常用系统调用IO函数 open close read write lseek ioctl 2. 标准IO(带缓冲IO) 概述 缓冲与冲洗 常用标准IO ...
- 标准IO与文件IO 的区别【转】
本文转载自:http://blog.sina.com.cn/s/blog_63f31f3401013jrn.html 先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一 ...
- 标准IO与文件IO 的区别
先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存 ...
- 文件的概念、标准IO其一
1.文件的概念 文件是一种存储在磁盘(掉电不丢失存储设备)上,掉电不丢失的一种存储数据的方式,文件在系统中有以下层次的结构来实现. 系统调用.文件IO.标准IO的关系如下: 2.linux系统的文件分 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
随机推荐
- Javascript的"预编译"思考
今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的 <script> var x = 1, y = z = 0; function add(n) { n = n+1; } y = ...
- cf(#div1 B. Dreamoon and Sets)(数论)
B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...
- target标签对于优化用户体验的作用
最近开始关注target="_blank"标签,是源于对咨询区的采纳工作.帖子内容页是在原页面加载,这样问题就来了,每采纳完一个问题,必须得后退好几次才可以,很不方便.后来按ctr ...
- Java 迭代器理解
1.Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔者不 ...
- 求平均排序MATLAB code
A0=R(:,1:2:end); for i=1:17 A1=A0(i,:); p=sort(unique(A1)); for j=1:length(p) Rank0(A1==p(j))=j; end ...
- 10+优秀“分步引导”jQuery插件(转)
很 多时候一个网站或者一个Web应用出品,为了让你的用户知道你的站点(或应用)有些什么?如何操作?为了让你的用户有更好的体验.往往这个时候都会给你的 站点(应用)添加一个分步指引的效果.然而这样的效果 ...
- 377. Combination Sum IV——DP本质:针对结果的迭代,dp[ans] <= dp[ans-i] & dp[i] 找三者关系 思考问题的维度+1,除了数据集迭代还有考虑结果
Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...
- ODBC错误处理
ODBC 中的错误处理 ODBC 中的错误是使用来自每个 ODBC 函数调用的返回值和 SQLError 函数或 SQLGetDiagRec 函数的返回值进行报告的.SQLError 函数用于 ODB ...
- iOS应用程序间共享数据
我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来 ...
- 一模 (5) day2
第一题: 题目大意:使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? n<=2*10^9 解题过程: 1.以前看到过这题了,一个数x的位数=(int)lg(x)+1 换一下底就是 ...