在linux中,文件总共划分为七种,他们分别是:
1、普通文件(regular):存于外部存储器中,用于存储普通数据。
2、目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。
3、管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。
4、套接字文件(socket):一种用于网络间通信的特殊文件。
5、链接文件(link):用于间接访问另外一个目标文件,相当于Windows快捷方式。
6、字符设备文件(character):字符设备在应用层的访问接口。
7、块设备文件(block):块设备在应用层的访问接口。
C标准库在应用层,系统·I/O驱动在内核层,硬件开发在硬件层。
图片:代码展示:
#include <stdio.h>
#include <string.h>
#include <strings.h>
// 这三个文件指针可以直接使用
//FILE *stdin;
//FILE *stdout;
//FILE *stderr;
#if 0
int main(int argc,char *argv[])
{
FILE* fp_r = fopen("1.txt", "r");
if (NULL == fp_r)
{
perror("1.txt open fail");
return -1;
}
FILE* fp_w = fopen("2.txt", "w");
if (NULL == fp_w)
{
perror("2.txt open fail");
return -1;
}
// 读取1.txt中的数据
char buf[101];
while(!feof(fp_r))
{
memset(buf, 0, sizeof(buf));
//bzero(buf, sizeof(buf));
fread(buf, 20, 5, fp_r);
// puts(buf); // 测试语句
fwrite(buf, strlen(buf), 1, fp_w);
}
fclose(fp_r);
fclose(fp_w);
return 0;
}
#endif
#if 1
int main()
{
char str[] = "hello";
fgets(str, 10, stdin);
fputs(str, stdout);
return 0;
}
#endif
文件:标准文件IO、系统文件IO
Linux中一切皆文件(除网口外)。
标准文件IO:C语言标准库中的文件操作函数
fopen、fread、fwrite、fclose、fprintf
系统文件IO:由操作系统直接提供的接口、直接与内核交互
open、read、write、close
差异:
1、缓存机制
标准IO:
默认使用缓冲区,数据先写入缓冲区,当满足条件时才做实际操作。
作用:减少系统调用次数,提升效率。
系统IO:
没有默认缓冲区,每次都是进行系统调用,效率低。
2、跨平台性
标准IO:
接口由C标注你定义,与操作系统无关,同一代码可在不同平台运行,跨平台性强。
系统IO:
接口是由操作系统决定,所以不能跨平台。
3、操作对象
标准IO:
操作对象是 FILE*, 其封装了文件描述符、缓冲区等信息。
系统IO:
Linux下操作对象是文件描述符,Windows下操作对象是句柄。
4、使用场景
标准IO:
通常在用户态下进行个操作。
系统IO:
一般用于底层设备驱动文件等控制。