Linux文件编程

一、文件基本概念
文件:存储在外部介质上数据的集合,是操作系统数据管理的单位

文件分类
按逻辑结构:
*记录文件:具有一定结构的记录组成(字长和不定长)
*流式文件:由一个个字符数据顺序组成
按存储介质:
*普通文件:存储介质文件(磁盘、磁带)
*设备文件:非存储介质(键盘、显示器、打印机)
按数据的组织形式:
*文本文件:ASCII(存储量大,速度慢,便于对字符操作)
*二进制文件:(存储量小,速度快,便于存放中间结果)

二、文件处理方法
缓冲文件系统:高级文件系统,系统自动开辟内存缓冲区
非缓冲文件系统:低级文件系统,用户为程序每个文件设定缓冲区

三、文件类型指针
FILE *fp;
文件打开,自动建立 文件结构体 ,文件关闭后,文件结构体自动被释放

FILE结构体
struct _iobuf {
    char *_ptr; /////文件输入的下一个位置
    int _cnt;  //////当前缓冲区的相对位置
    char *_base;////////指基础位置
    int  _flag; /////文件标志
    int _file; //////文件的有效性验证
    int _charbuf; ///检测缓冲区状况,如果无缓冲区则不读取
    int _bufsiz;//////文件的大小
    char *_tmpfname;/////临时文件名
    };
    typedef struct _iobuf FILE;

四、文件的打开关闭
打开文件-> 文件读/写->关闭文件
系统自动打开和关闭三个标准文件:
标准输入——键盘 stdin
标准输出——显示器 stdout
标准出错输出——显示器 stderr

打开文件fopen
函数原型:FILE *open(char *name,char *mode)

#include <stdio.h>

int main()
{
    FILE* fp;
    ffp = fopen("test.txt","r");
    if(fp == NULL)
    {
        printf("fopen error\n");
        return -1;
    }
    return 0;
}

这里写图片描述

关闭文件fclose
函数原型:int fclose(FILE *fp)
返值正常关闭为0,出错时非0

五、文件的读写
字符I/O:fputc与fgetc
int fputc(int c,FILE *fp):把一字节代码C写入fp指定的文件中
int fgetc(FILE *fp)从fp指向的文件中读取一字节代码
这里写图片描述
例子:从键盘输入字符逐个存到磁盘文件中,直到输入“#”为止
这里写图片描述

数据块I/O
函数原型:
size_t fread(void *buffer,size_t size,size_t count,FILE *fp)
size_t fwrite(void *buffer,size_t size,size_t count,FILE *fp)
buffer:指向输入\输出数据块的首地址的指针
size:每个要读写的数据块的大小(字节数)
count:读写的数据块的个数
fp:文件指针
一般用于二进制文件的输入、输出

格式化I/O
int fprintf(FILE *fp,const char *format[,argument,…])
int fscanf(FILE *fp,const char *format[,address,…])
功能:按格式对文件进行I/O操作
返值:成功返回I/O个数,出错或文件尾,返回EOF

char *fgets(char *s,int n,FILE*fp);
int fputs(char *s,FILE *fp);
功能:从fp指向的一个文件读写一个字符串
返值:fgets正常时返回读取字符串的首地址;出错或文件尾:NULL
fputs正常时返回写入的最后一个字符,出错为EOF

六、文件的定位
文件位置指针——指向当前读写位置的指针
void rewind(FILE *fp)
功能:重复文件位置指针到文件开头

例:对一个磁盘文件进行显示和复制两次操作
#include<stdio.h>
main()
{
    FILE *fp1,*fp2;
    fp1 = fopen("c4.c","r");
    fp2 = fopen("c41.c","w");
    while(!feof(fp1))putchar(getc(fp1));
    rewind(fp1);//////读取的文件指针归位
    while(!feof(fp1))putc(getc(fp1),fp2)
    fclose(fp1);
    fclose(fp2);
}

int fseek(FILE *fp,long offset,int whence)
offset:位移量,>0向后移动
whence:起始点 ;文件开始 SEEK——SET 0;文件当前位置 SEEK_CUR 1;文件末尾 SEEK_END 2
功能:改变文件位置指针的位置
返值:成功返回0,失败返回非0

long ftell(FILE *fp)
功能:返回位置指针当前位置
返值:成功返回当前指针位置,失败返回-1L

猜你喜欢

转载自blog.csdn.net/zxh1592000/article/details/79745675