标准文件I/O补充知识

发布于:2025-07-22 ⋅ 阅读:(9) ⋅ 点赞:(0)

在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:
        一般用于底层设备驱动文件等控制。


 


网站公告

今日签到

点亮在社区的每一天
去签到