---恢复内容开始---

1.linux标准io的copy

#include<stdio.h>

int main(int argc,char **argv)

{

if(argc<3)

{

printf("use:mycp file1 file2\n");

return -1;

}

FILE *src=fopen(argv[1],"r");//打开源文件

if(src==NULL)

{

printf("no file!\n");

return -1;

}

FILE *dest=fopen(argv[2],"w");

if(dest==NULL)

{

printf("no file!\n");

fclose(src);

return -1;

}

int ret=fseek(src,0,SEEK_END);

long len=ftell(src);

rewind(src);

char buffer[len];

ret=fread(buffer,len,1,src);

ret=fwrite(buffer,len,1,dest);

fclose(src);

fclose(dest);

}

#include<stdio.h>

#include<string.h>

#include<errno.h>

int main(int argc,char argv[])

{

FILE *fp;

if((fp=fopen("f3.txt","w+"))==NULL)//打开文件的路径和路径名,打开文件的状态

{

fprintf(stderr,"fopen() failed:%s\n",strerror(errno));

return -1;

}

fclose(fp);

return 0;

}

1:标准IO库操作是围绕着流来进行的,当我们通过fopen标准IO库函数打开一个文件,我们就使一个文件和一个IO流相关联。在这里我们把IO流和文件指针FILE*等同起来,因为所有针对IO流的操作都是通过FILE*指针来实现的。

2:标准IO库引入了IO缓存,通过累积一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员介入。然而,也正是因为我们看不到标准IO库的缓存:

3:该对象通常是一个结构,它包含了标准IO库为管理该流所需要的所有信息,包括:用于实际IO的文件描述符、指向用于该流缓冲区的指针、缓冲区的长度、当前在缓冲区中的字符数以及出错标志等等。

4:文件缓冲

目的:尽量减少使用 read/write的调用次数

定义:系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,装满缓冲区在一起送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据读入到内存缓冲区中,然后在从缓冲区逐个的将数据送到程序的数据区。

分类:全缓存、行缓存、不缓存。

;全缓冲:在填满标准IO缓冲区后才进行实际IO操作。对于驻留在磁盘上的文件通常是由标准IO库实施全缓冲的。在一个流上执行第一次IO操作时,相关标准IO函数通常调用malloc获得需使用的缓冲区。flush,说明标准IO缓冲区的写操作。缓冲区可由标准IO历程自动冲洗,或者可调用函数fflush冲洗一个流。

;行缓存 : 这种情况下,当在输入和输出中遇到换行符时,刷新一次,标准IO库执行IO操作。这允许我们一次输出一个字符(用标准IO fputs函数),但只有在谢了一行之后才进行实际IO操作。当流涉及一个终端时(例如标准输入和输出),通常使用行缓冲。

;不缓存:不对字符进行缓冲。

---恢复内容结束---

linux标准io的copy的更多相关文章

  1. Linux标准IO和管道

    Linux标准IO和管道 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.标准输入和输出 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: ...

  2. linux标准IO缓冲(apue)

    为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件 ...

  3. Linux 标准IO库介绍

    1.标准IO和文件IO有什么区别? (1).看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是Linux系统的API. (2).C语言库函数是由API封装而来的.库函数内部也是通过调用API ...

  4. [Linux]标准IO全缓冲和行缓冲

    概述 标准IO中,标准错误是不带缓冲的.若是指向终端设备的流才是行缓冲的,否则是全缓冲的. 行缓冲也可以分配缓冲区,当遇到超大行(超过缓冲区的行),缓冲区内容也会优先刷出. 示例 #include & ...

  5. 1.Linux标准IO编程

    1.1Linux系统调用和用户编程接口 1.1.1系统调用 用户程序向操作系统提出请求的接口.不同的系统提供的系统调用接口各不相同. 继承UNIX系统调用中最基本和最有用的部分. 调用按照功能分:进程 ...

  6. linux 标准io笔记

    三种缓冲 1.全缓冲:在缓冲区写满时输出到指定的输出端. 比如对磁盘上的文件进行读写通常是全缓冲的. 2.行缓冲:在遇到'\n'时输出到指定的输出端. 比如标准输入和标准输出就是行缓冲, 回车后就会进 ...

  7. linux系统io的copy

    #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h&g ...

  8. 为什么需要标准IO缓冲?

    (转)标准I/O缓冲:全缓冲.行缓冲.无缓冲 标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数.它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的 ...

  9. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

随机推荐

  1. sql 多行转换为一行

    select 字段1, [val]=( select 字段2 +',' from 表名 as b where b.字段1 = a.字段1  for xml path('')) from 表名 as a ...

  2. Eclipse中10个最有用的快捷键组合

    Eclipse中10个最有用的快捷键组合 (转) 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...

  3. 利用WPS 2012/2013 0day针对中国政府部门的定向攻击

    今天早上,我们捕获到一个利用wps 2012/2013 0day针对中国政府部门的钓鱼邮件定向攻击事件. 邮件发件人以2014中国经济形势解析高层报告组委会 标题发出,附件为包含wps2012 0da ...

  4. Android中的Service小结

    简介 Service适合执行不需要和用户交互,而且长期运行的任务.即使程序被切换回后台,服务仍然可以正常运行.Service并不自动开启线程,默认运行在主线程中. Service中需要重载的函数 on ...

  5. Scala编程--基本类型和操作

    如果你熟悉Java,你会很开心地发现Java基本类型和操作符在Scala里有同样的意思.然而即使你是一位资深Java开发者,这里也仍然有一些有趣的差别使得本章值得一读.因为本章提到的一些Scala的方 ...

  6. 关于C语言的问卷调查(作业三)

    1.你对自己的未来有什么规划?做了哪些准备? 答:我对我未来的规划就是希望能够学有所用,将来可以从事有关IT方面的,跟自己的专业对口.为此现在我需要多看一些和这个专业有关的书籍,自学一些知识,多些一些 ...

  7. sqlServer数据库插入数据后返回刚插入记录的自增ID

    insert into tabls1(row1,row1) values('0','0') select @@IDENTITY

  8. html canvas 骰子1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 备份错误。

    错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 2010-10-19 11:44:06|  分类: sql|举报|字号 订阅     ql2005备份的时候,选择备份路径是一方面,但 ...

  10. MySQL数据库9 - 日期与时间函数

    一 日期和时间函数 函数的概念:按指定格式输入参数,返回正确结果的运算单元 1. 返回当前日期:curdate() current_date() current_date()+0可以将当前日期转换为数 ...