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的更多相关文章

  1. 文件IO和标准IO的区别【转】

    一.先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都调用内核中的一个系统调用.也就是一般所 ...

  2. 文件IO与标准IO的区别

    文件IO与标准IO的区别 文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作,文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立 ...

  3. 8 . IO类-标准IO、文件IO、stringIO

    8.1 IO类 #include <iostream> //标准IO头文件  8.2 文件输入输出流 #include <fstream> //读写文件头文件 std::fst ...

  4. linux文件io与标准io

    文件IO实际是API,Linux对文件操作主要流程为:打开(open),操作(write.read.lseek),关闭(close). 1.打开文件函数open(): 涉及的头文件:  #includ ...

  5. 系统调用IO和标准IO

    目录 1. 系统调用IO(无缓冲IO) 系统调用 常用系统调用IO函数 open close read write lseek ioctl 2. 标准IO(带缓冲IO) 概述 缓冲与冲洗 常用标准IO ...

  6. 标准IO与文件IO 的区别【转】

    本文转载自:http://blog.sina.com.cn/s/blog_63f31f3401013jrn.html 先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一 ...

  7. 标准IO与文件IO 的区别

    先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存 ...

  8. 文件的概念、标准IO其一

    1.文件的概念 文件是一种存储在磁盘(掉电不丢失存储设备)上,掉电不丢失的一种存储数据的方式,文件在系统中有以下层次的结构来实现. 系统调用.文件IO.标准IO的关系如下: 2.linux系统的文件分 ...

  9. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

随机推荐

  1. Javascript的"预编译"思考

    今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的 <script> var x = 1, y = z = 0; function add(n) { n = n+1;  } y = ...

  2. cf(#div1 B. Dreamoon and Sets)(数论)

    B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. target标签对于优化用户体验的作用

    最近开始关注target="_blank"标签,是源于对咨询区的采纳工作.帖子内容页是在原页面加载,这样问题就来了,每采纳完一个问题,必须得后退好几次才可以,很不方便.后来按ctr ...

  4. Java 迭代器理解

    1.Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔者不 ...

  5. 求平均排序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 ...

  6. 10+优秀“分步引导”jQuery插件(转)

    很 多时候一个网站或者一个Web应用出品,为了让你的用户知道你的站点(或应用)有些什么?如何操作?为了让你的用户有更好的体验.往往这个时候都会给你的 站点(应用)添加一个分步指引的效果.然而这样的效果 ...

  7. 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 ...

  8. ODBC错误处理

    ODBC 中的错误处理 ODBC 中的错误是使用来自每个 ODBC 函数调用的返回值和 SQLError 函数或 SQLGetDiagRec 函数的返回值进行报告的.SQLError 函数用于 ODB ...

  9. iOS应用程序间共享数据

    我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来 ...

  10. 一模 (5) day2

    第一题: 题目大意:使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? n<=2*10^9 解题过程: 1.以前看到过这题了,一个数x的位数=(int)lg(x)+1  换一下底就是 ...