【无标题】

1.标准 I/O库

1.1 函数fwide

fwide函数可用于设置流的定向。

#include<stdio.h>
#include<wchar.h>

int fwide(FILE*fp,int mode);//1.已经打开的文件流 2.mode 操作选项

1.如若mode参数的值为负数,则指定的流将设置为字节定向的.

2.如若mode参数的值为正,fwide将试图使指定的流是宽定向的.

3.如若mode参数的值为0,fwide将不视图设置流定向的,但返回该对象的流设置.

1.2 标准输入和标准输出标准错误流

#include<stdio.h>

STDIN_FILENO    //标准输入
STDOUT_FILENO   //标准输出
STDERR_FILENO   //标准错误

1.3 设置缓存模式 setbuf和setvbuf

下面两个函数用来设置缓存模式

#inclde<stdio,h>

void setbuf(FILE* res
trict fp,char *restrict buf);//1.fp 已经打开的流 2.buf 缓存区其长度为 BUFSIZE

int setvbuf(FILE* restrict fp,char *restrict buf,int mode,size_t size);//1.fp 已经打开的流 2.buf 缓存区长度 
3.mode 具体的缓存模式 4.size 缓存区长度

1.关于mode的参数设置 主要有 IOFBF全缓冲, IOLBF 行缓冲 ,_IONBF 不带缓冲

1.4 刷新缓存区

#include<stdio.h>

int fflush(FILE *fp);

1.使用该函数将强制将缓存区数据写入到内核.

1.5 打开流 和关闭流

#include<stdio.h>

FILE *fopen(const char*restrict pathname,const char*restrict type);

FILE *freopen(const char*restrict pathname,const char*restrict type,FILE *restrict fp);

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

1.fopen函数打开路径名为pathname的文件

2.freopen函数在一个指定流上打开一个指定文件。如果该流已经打开,则先关闭该流。此文件一般用于将一个指定文件打开为一个预定义的流:标准输入或者标准输出。

3.fdopen函数取一个已经打开的文件描述符。

调用下面函数将关闭一个流.

#include<stdio.h>

int fclose(FILE *fp);

1.6 读和写流

下面函数可用于一次读取一个字符

#include<stdio.h>

int getc(FILE *fp);

int fgetc(FILE *fp);

int getchar(void);

int ferror(FILE *fp);

int feof(FILE *fp);

void clearerr(FILE *fp);

1.函数getchar等同于getc(stdin)。前两个函数的区别是,getc可以被实现为宏,fgetc不可用实现为宏。

2.不管是出错还是到达文件尾部,这三个函数都返回相同的值。为了区分必须调用函数 ferror和feof函数。如果为真则返回非0

3.大多实现都为每个流在FILE对象中维护了两个标志.出错标志和文件结束标志,调用函数clearerr可以清楚标志。

#include<stdio.h>

int ungetc(int c,FILE *fp);

1.调用函数ungetc可以把一个字符压入会流中。只是压入会内存,并不会更改硬盘中的文件内容。

#include<stdio.h>

int putc(int c,FILE*fp);

int fputc(int c,FILE *fp);

int putchar(int c);

1.与输入函数一样,putchar©与putc()相同。并且putc可以被实现为宏而fptuc函数不能实现为宏。

1.7 每次一行I/O

下面函数提供每次输入一行的功能

#include<stdio.h>

char *fgets(char *restrict buf,int n,FILE *restrict fp);

char *gets(char *buf);

若成功返回buf,若出错或者到达文件尾端,返回NULL。

1.fgets 从fp流中读取一行字符,并且以null字符结束。此函数一直读取到下一个换行符为止,若加上换行符的长度大于n-1,则返回一个不完整的行,并且下一次调用还会从读取

下面函数提供每次输出一行的功能

#include<stdio.h>

int fputs(const char*restrict str,FILE *restrict fp);

int puts(const char *str);

1.函数fputs将以null字节终止的字符串写入到指定的流,尾端的终止符号null不写出。

2.注意这并不是每次输出一行,因为字符串不需要换行符最为最后一个非null字符。同在是一个换行符,但不总要求如此。

3.函数puts将一个以null字符终止的字符串写入到标准输出,终止符不写出。但是puts随后又将一个换行符写到biao’zhun

1.8 二进制I/O

下面函数可用用来读写二进制数据

#include<stdio.h>

size_t fread(void *restruct ptr,size_t size,size_t nobj,FILE *restrict fp);

size_t fwrite(const void*restruct ptr,size_t size,size_t nobj,FILE *restrict fp);

1.nobj为元素的个数 size为单个元素的大小。

1.9 定位流

#include<stdio.h>

long ftell(FILE *fp);

int fseek(FILE *fp,long offset,int whence);

void rewind(FILE *fp);

off_t ftello(FILE *fp);

int fseeko(FILE *fp,off_t offset,int whence);

1.ftell 返回当前文件的偏移量,类型为long.若失败返回-1L

2.fseek 设置当前的文件偏移量,whence与lseek设置相同,用来设置文件的偏移方式

3.rewind 函数使一个文件的偏移量回到起始位置.

4.除了off_t和long 类型不同外,ftello和fseeko与ftell和fseek函数作用相同

下面两个函数是iso c提供的。

#include<stdio.h>

int fgetpos(FILE *restrict fp,fpos_t *restrict pos);

int fsetpos(FILE *fp,const fpos_t *pos);

1.fgetpos函数将文件位置指示器的当前值存入由pos指向的对象中.

2.后续调用fsetpos函数可用设置文件的偏移量

1.10 获取文件描述符 fileno

下面函数获取一个标准IO文件的文件描述符fd

#include<stdio.h>
int fileno(FILE *fp); 

1.fileno函数返回与该流相关联的文件描述符

1.11 临时文件

b标准isoc提供了两个函数帮助创建临时文件

#include<stdio.h>
char *tmpnam(char *ptr);//1.ptr 临时文件名字返回          
//返回值:指向唯一的路径名的指针
FILE *tmpfile(void);
//返回值:若成功,返回文件指针;若出错,返回NULL

1.tmpnam函数产生一个与现有文件名不同的一个有效路径名字符串。
2.tmpfile函数创建一个临时的二进制文件,进程关闭后会删除该文件.

下面两个函数,用来创建目录和文件

#include<stdlib.h>

char *mkdtemp(char *template);
//返回值:若成功,返回指向目录名的字符串指针,出错返回NULL

int mkstemp(char *template);
//返回值:诺成功,返回文件描述符,若出错返回-1

1.两个函数的名字是通过template这个参数选择的,这个字符串的后六位设置位XXXXXX,函数将根据这个字符串,构建一个唯一的路径名。

1.12 内存流

fmemopen 是一个在 C 语言中用于处理内存缓冲区的文件流操作的函数。这个函数将一个内存块转换为一个 “文件流”,允许你使用标准的 C I/O 函数(如 freadfwritefseek 等)来读取或写入该内存块,就像操作一个文件一样。

以下是 fmemopen 的详细说明:

#include <stdio.h>  
FILE *fmemopen(void *buf, size_t size, const char *mode);//1.指向一块自定义的缓存 2.指定缓存大小 3.模式
//若成功,返回流指针,若失败返回null
type说明
r或rb为读而打开
w或wb为写而打开
a或ab追加,为在第一个null字节处写而打开
r+或r+b或rb+为读和写而打开
w+或w+b或wb+把文件截断至0,为读和写打开
a+或a+b或者ab+追加,为在第一个null字节处读和写而打开
  1. 内存管理:如果 bufNULL,则 fmemopen 会分配内存。在这种情况下,你应该在不再需要文件流时,使用 fclose 来关闭它,以释放分配的内存。如果 buf 不是 NULL,则你负责管理这块内存的生命周期。
  2. 模式限制:在 "w""w+" 模式下,fmemopen 不会清除或初始化提供的缓冲区。它只会从缓冲区的开始位置写入数据。如果缓冲区中已经有数据,这些数据可能会被新写入的数据覆盖。
  3. 线程安全:虽然 fmemopen 在某些系统上可能是线程安全的,但它通常并不保证这一点。如果你在多线程环境中使用它,并且多个线程可能同时访问同一个 FILE 对象,你需要自己实现适当的同步机制。
  4. 可移植性fmemopen 并不是 C 标准库的一部分,因此它的可用性取决于具体的平台和编译器。在一些系统上,你可能需要包含特定的头文件或 使用特定的编译器标志来启用它。
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值