linux标准io的copy

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

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);

}

2.用标准IO,以读写方式打开文件f3.txt,如果该文件不存在,则创建。如果该文件已经存在,则长度截短为0。

#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操作。当流涉及一个终端时(例如标准输入和输出),通常使用行缓冲。

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

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

时间: 2024-12-26 13:03:24

linux标准io的copy的相关文章

1.Linux标准IO编程

1.1Linux系统调用和用户编程接口 1.1.1系统调用 用户程序向操作系统提出请求的接口.不同的系统提供的系统调用接口各不相同.继承UNIX系统调用中最基本和最有用的部分. 调用按照功能分:进程控制.进程间通讯.文件系统控制.存储管理.网络管理.套接字控制.用户管理. 1.1.2用户编程接口 实际开发使用的是用户编程接口: (1).系统调用接口功能非常简单,无法满足程序的需求.(2).不同操作系统的系统调用接口不兼容,程序移植时工作量大. 1.2Linux标准编程接口 1.2.1标准IO的由

嵌入式 Linux系统编程(三)——标准IO库

嵌入式 Linux系统编程(三)--标准IO库 与文件IO函数相类似,标准IO库中提供的是fopen.fclose.fread.fwrite等面向流对象的IO函数,这些函数在实现时本身就要调用linux的文件IO这些系统调用. 一.标准IO库函数的缓冲机制 由于IO设备的访问速度与CPU的速度相差好几个数量级,为了协调IO设备与CPU的速度的不匹配,对于块设备,内核使用了页高速缓存,即数据会先被拷贝到操作系统内核的页缓存区中,然后才会从操作系统内核的缓存区拷贝到应用程序的地址空间. 当应用程序尝

Linux学习之标准IO 管道 033_7

默认输入为键盘,标准输出为显示器,错误输出为显示器 把标准输出和错误输出重定向到文件: command operator filename operators: >:标准输出重定向 :把ls -R的输出重定向到文件 2>:错误输出重定向 &>:将正确和错误的输出都重定向 同时将正确和错误信息分别导入到不同文件: 以上默认覆盖,如果在文件末尾添加则用>>s 把错误输出重定向到空设备,也就是忽略错误信息 管道: 将前面一条命令执行的结果作为后面一条命令的输入 如: ls

Linux基础管理—— &quot; 标准IO及重定向及管道 &quot;

1.标准输入和输出 一般来说程序是由指令+数据组成:那么就不可避免的要读入和输出数据,即input和output. 打开的文件都有一个fd: file descriptor (文件描述符),可以在/proc/$$/fd中查看当前终端打开的文件数,一个文件描述符就是一个打开的文件. [[email protected] ~]#ll /proc/$$/fd total 0 lrwx------. 1 root root 64 Nov 26 12:27 0 -> /dev/pts/5 lrwx----

linux 同步IO: sync msync、fsync、fdatasync与 fflush

最近阅读leveldb源码,作为一个保证可靠性的kv数据库其数据与磁盘的交互可谓是极其关键,其中涉及到了不少内存和磁盘同步的操作和策略.为了加深理解,从网上整理了linux池畔同步IO相关的函数,这里做一个罗列和对比.大部分为copy,仅为记录,请各位看官勿喷. 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行.当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓

Linux Network IO Model Learning

目录 0. 引言 1. IO机制简介 2. 阻塞式IO模型(blocking IO model) 3. 非阻塞式IO模型(noblocking IO model) 4. IO复用式IO模型(IO multiplexing model) 5. 信号驱动式IO模型(signal-driven IO model) 6. 异步IO式IO模型(asynchronous IO model) 7. Linux下IO技术简介 8. IO模型编程举例 0. 引言 Linux将所有外部设备都看做一个文件来进行操作.

内核IO和标准IO

对于文件的读写操作函数在执行的空间来分,可以分为内核IO(主要在内核中运行)和标准IO(主要在用户空间中运行). 内核IO需要自己创建和管理缓存,而标准IO是自动分类缓存,一般来说,内核IO的效率高于标准IO,但是差距不是很大,考虑移植性,还是建议使用标准IO(只要是支持标准C语言就支持标准IO). 无论是标准IO还是内核IO都是对文件的信息,读写文件的指针进行记录的,调用相应的函数可以进行文件信息的读取和指针的修改. 以下为IO相关的函数的头文件,使用,参数,返回值的说明 linux C语言I

第一天20150829:标准IO 和 系统IO -----stdio and sysio

IO 的实现包括两种实现: 1.stdio标准IO 2.sysio系统IO IO的两种实现方式正常都可以使用.但是,在使用的过程中优先使用stdio标准IO. 首先要了解这两种实现的原理: 1.sysio系统IO:我们作为USER 要与内核对话,那么系统为我们提供了一个sysio,可以直接对话KERNAL. 那么问题就产生了:如果USER使用的平台环境不一样(有的人有linux,有的人用windows),那么由于KERNAL不一样,那么提供给USER的sysio也会不一样 2.所以引申出来一个标

linux 文件IO

1.文件描述符 (1)文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表.(2)文件描述符这个数字是open系统调用内部由操作系统自动分配的,操作系统分配这个fd时也不是随意分配,也是遵照一定的规律的,我们现在就要研究这个规律.(3)操作系统规定,fd从0开始依次增加.fd也是有最大限制的,在linux的早期版本中(0.11)fd最大是20,所以当时一个进程最多允许打开20个文件