您的位置:首页 > 其它

标准I/O

2020-04-06 07:18 239 查看

ANSI C 文件管理,包含文件指针FILE的概念;文件和流之间的关系;文本与二进制文件;文件的基本操作。它是Linux C最基本的文件编程。
ANSI C标准文件库封装了文件的系统调用,为了提升效率还加入了文件缓冲机制,提供了纪录的方式读写文件。

  1. FILE 结构在stdio.h头文件的定义,其中包含打开文件的句柄,缓冲等信息,这些信息供文件操作函数使用,用户一般不必关心。

  2. 存储方式
    ANSI C 规定了两种文件存储方式,文本和二进制方式。
    Linux对文件存储方式不做区分。Linux系统,文件存放均以二进制方式存储。
    文本文件也称ASCII文件,每个字节存储一个ASCII码字符,文本文件存储数量大,便于对字符进行操作,但是操纵速度慢。二进制文件将数据按照内存中的存储形式进行存放,二进制文件的存储量小,但是存取速度快,适合存放中间结果。

  3. 标准输入,标准输出,标准错误
    Linux系统为每一个进程提供了标准输入(stdin,默认从键盘读取数据),标准输出(stdout,默认向屏幕输出数据),标准错误(stderr,默认向屏幕输出数据)三个文件流。3个I/O数据流定义在stdio.h,C标准库函数printf()就是默认使用stdout输出数据。用户可以通过重新设置标准I/O,把程序的输出结果重定向到其他设备

  4. 缓冲

  5. ANSI 文件库 打开文件和关闭文件函数:fopen() 和 fclose()

FILE *fopen(const char *path, const char *mode);
int fclose(FILE *stream);

path参数指定文件路径,mode指定打开方式。
fopen()和fclose()配对使用,因为文件流可能带有缓冲,只有成功关闭文件以后,才能保证缓冲被正确写到文件中,不然可能造成文件数据丢失。

  1. 文件读写
    ANSI C提供了3中不同的文件读写函数。
    (1) 按字节读写:
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

fgetc()和getc()作用一致,从文件流读取一个字符,如果读取错误或者读取到文件结尾,返回预定义常量EOF. getc()通常被定义为一个宏,执行效率会更高。getchar()是从标准输入stdin读取一个字符,相当于fgetc(stdin).

int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();

他们也有返回值,返回值与其对应的读函数相同。
(2) 按行读取

char *fgets(char *s, int size, FILE *stream);
char *gets(char *s)

两个函数均指定了缓冲s。
fgets()从文件流读取指定size的一行字符进入缓冲s. 一行数据以换行符作为标记,如果一行字符数小于fgets()指定size,则完整读入整行;否则最多读取size-1个字符;读取一行字符之后,再在最后写入一个字符串结束符0(null).
gets()从stdin读取一行字符,但会丢掉换行符。gets()没有指定缓冲大小,容易造成缓冲溢出,操作比较危险。

int fputs(const char *s, FILE *stream);
int puts(const char *s);

fputs()将以字符串结束符null结尾的一行字符串写入文件流,null不写入,终止符前是否有换行符都会被写入。puts()将以null结尾的一行字符串写入stdout,但是puts()会在写入一行字符串后再写入一个换行符

(3) 按块读取

int fwrite(const void *ptr, size_t size, sizt_t nmemb, FILE *stream);
int fread(void *ptr, size_t size, sizt_t nmemb, FILE *stream);

其中ptr为内存中存放数据块的地址, 函数返回成功读取数据块的个数。

(4) 文件流定位

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
void rewind(FILE *stream);

fseek()中whence有三个取值,SEEK_CUR, SEEK_SET,SEEK_END.

  1. 不支持ANSI C 文件编程
    cd /sys/kernel/debug/hifi4dsp
    echo “read 0x1fed4010 0x1000” > reg
    cat reg > ./data.txt
    adb pull到本地
  • 点赞
  • 收藏
  • 分享
  • 文章举报
东溯 发布了5 篇原创文章 · 获赞 0 · 访问量 172 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: