标准IO和文件IO是计算机编程中用于处理输入/输出(Input/Output,简称IO)操作的两种不同方式,它们各自具有不同的特点和使用场景。
一、定义与特点
标准IO:
- 定义:标准IO通常指的是C语言提供的标准库中的IO操作,主要涉及与标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的交互。
- 特点:
- 跨平台性:由于是基于C语言标准库,因此可以在不同的操作系统平台上编译和执行。
- 缓冲机制:标准IO在文件IO的基础上封装了缓冲机制,先读写缓冲区,必要时再访问实际文件,从而减少系统调用次数,提高执行效率。
- 使用文件流指针:通过文件指针(FILE*)来操作文件,文件指针指向一个FILE结构体,该结构体包含了文件的属性和缓冲区等信息。
文件IO:
- 定义:文件IO一般指的是Linux系统调用层面的IO操作,是操作系统提供的接口函数,用于对文件的读取和写入。
- 特点:
- 系统调用:直接通过系统调用来实现文件的读写操作,没有缓冲机制。
- 使用文件描述符:文件描述符是一个非负整数,用于标识打开或创建的文件,通过文件描述符来间接找到文件并对其进行操作。
- 可操作多种类型文件:不仅可以操作普通文件,还可以操作设备文件、管道文件、套接字文件等。
二、主要函数与操作
标准IO的主要函数:
fopen()
:打开文件,并返回一个文件指针。fclose()
:关闭文件。fread()
:从文件中读取数据。fwrite()
:向文件中写入数据。fseek()
:移动文件指针到指定位置。
文件IO的主要系统调用:
open()
:打开文件,并返回一个文件描述符。close()
:关闭文件。read()
:从文件中读取数据。write()
:向文件中写入数据。lseek()
:移动文件描述符的读写位置。
三、区别与联系
区别:
- 跨平台性:标准IO可以在不同的操作系统平台上编译和执行,而文件IO通常局限于类UNIX环境。
- 缓冲机制:标准IO带有缓冲机制,而文件IO没有缓冲机制,每次操作都会执行系统调用。
- 接口:标准IO使用文件流指针(FILE*)作为接口,而文件IO使用文件描述符(非负整数)作为接口。
- 效率:由于标准IO带有缓冲机制,因此其执行效率通常高于文件IO。
- 可操作文件类型:文件IO可以操作多种类型的文件,而标准IO通常只用于操作普通文件。
联系:
- 标准IO是基于文件IO的封装,它在文件IO的基础上增加了缓冲机制等高级功能。
- 在Linux系统中,标准IO的实现通常依赖于系统调用(如
read()
、write()
等),但通过封装提供了更高级、更易于使用的接口。
1. 标准IO
也称为标准输入输出(Standard Input/Output),是计算机编程中一种常见的IO操作方式,特别是在C语言及其衍生语言中广泛使用。它主要通过标准C库中的函数来实现,提供了丰富的接口用于数据的输入和输出。
文本文件是一种计算机文件,它包含的是人类可读的文本数据,而不是二进制代码或机器语言。
2,文件的概念,作用
linux中一切都是文件。文件用来存储数据(数据,指令);
3,linux中文件的类型,
7种,d为目录 ,-为普通文件,l为软链接(符号链接,类似于快捷方式),p管道文件,s套接字文件, ,c为字符设备,b块设备
流: FILE*
struct FILE
{
}
数据从文件当中流入和流出所体现出来的字节
流叫做流
流的分类:
二进制流: 2001 \n
二进制数据的流
文本流:
ASCII码数据的流 \n \t
FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
流对象 ===》头 《===数据====》尾
stdin FILE* scanf ();
stdout printf();
stderr
4、ll命令为显示当前目录下文件的详细信息
开头第一个字符即为文件的类型
后面可分为三部分rw- rw- r--
第一部分为用户权限,即后面的第一个linux,第二个为小组权限,即第二个linux
r为读,w为写,x可执行
可改为二进制,八进制
eg:-w- --x r--
010 001 100
2 1 4
1为硬链接,多个文件名关联一个文件内容
组名linux后面为文件的大小
再后面为最后一次修改时间
#include <stdio.h>
// ./a.out 4 5 56 7 8
int main(int argc, char *argv[])
{
if(argc<3)
{
printf("usage:./a.out srcfile dstfile\n");
return 1;
}
FILE *src = fopen(argv[1],"r");
FILE * dst= fopen(argv[2],"w");
if(NULL == src || NULL == dst )
{
printf("fopen error\n");
return 1;
}
while(1)
{
int c = fgetc(src);
if(EOF== c)
{
break;
}
fputc(c,dst);
}
fclose(dst);
fclose(src);
return 0;
}
fwrite
函数返回成功写入文件的数据项个数。这个值可以与count
参数进行比较,以检查是否所有数据都被成功写入。返回值小于形参size_t count,表示错误。