我是靠谱客的博主 健忘蜜蜂,最近开发中收集的这篇文章主要介绍fb与FILE,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引。
fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。

1.fb文件描述符

注:这些我们都在上次博客中写到过,有兴趣的朋友可以去看看。


在Linux系统中一切皆文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(默认最大1024),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。

文件描述符的操作(如: open(),creat(),close(),read()))返回的是一个文件描述符,它是int类型的整数,即fd,其本质是文件描述符表中的下标,它起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。每个进程在PCB(Process Control Block)即进程控制块中都保存着一份文件描述符表,文件描述符就是这个表的索引,文件描述表中每个表项都有一个指向已打开文件的指针; 已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。每打开一个文件,fd默认从最小的未被使用的下标开始分配。

查看默认文件描述符的大小:
这里写图片描述

2.FILE:

FILE:我们称之为文件指针,

fopen:

FILE *fopen(const char *path, const char *mode);

FILE *fdopen(int fd, const char *mode);

FILE *freopen(const char *path, const char *mode, FILE *stream);
//-- path: 文件路径,如:"./text.txt"  
//    -- mode: 文件打开方式,例如:  
//             "r" 以只读方式打开文件,该文件必须存在。  
//             "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  
//            "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。  
//             "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)  
//           "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)  
//            "wb" 只写打开或新建一个二进制文件,只允许写数据。  
//            "wb+" 读写打开或建立一个二进制文件,允许读和写。  
//             "ab" 追加打开一个二进制文件,并在文件末尾写数据。  
//             "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。     
//    --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在error中。

fread–fwrite:


size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                     FILE *stream);
//    -- buffer:指向数据块的指针  
//    -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)  
//    -- count:数据个数  
//    -- stream:文件指针 

fclose:

 int fclose(FILE *fp);

代码实例:

#include <stdio.h>
#include <string.h>

#define WENJIAN "./text.txt"

int main()
{
    FILE *fp = fopen(WENJIAN,"a+");
    if(fp == NULL)
    {
        perror("fopen");
        return -1;
    }
    char buf[128];
    strcpy(buf,"hi,i am a good man!");
    if(fwrite(buf,sizeof(char),strlen(buf),fp) == 0)
    {
        perror("fwrite");
        return -1;
    }
    fclose(fp);


    FILE *filp = fopen(WENJIAN,"r");
    if(filp == NULL)
    {
        perror("fopen");
        return -1;
    }
    char arr[128];
    if(fread(arr,sizeof(char),strlen(buf),filp) == 0)
    {
        perror("fread");
        return -1;
    }
    printf("%sn",arr);
    fclose(fp);
    return 0;
}

这里写图片描述

最后

以上就是健忘蜜蜂为你收集整理的fb与FILE的全部内容,希望文章能够帮你解决fb与FILE所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部