C语言其他输入输出函数fflush ftell fseek setbuf setvbuf rewind fgetpos fsetpos feof ferror clearerr tmpfile等介绍

1、fflush
int fflush ( FILE * stream );

函数功能:刷新缓冲区。
#include<stdio.h>

int main()
{
char passwd[20] = {0};
int ch = 0;
printf(“请输入密码:>”);
scanf("%s", passwd);
printf(“请确认密码(Y/N):>”);
//fflush(stdin);
ch = getchar();
if(ch == ‘Y’)
{
printf(“确认成功\n”);
}
else if(ch == ‘N’)
{
printf(“确认失败\n”);
}
return 0;
}

如果不执行其中的fflush(stdin)语句,会出现如下情况。
请输入密码:>12
请确认密码(Y/N):>请按任意键继续. . .
这是因为在输入完12后,又输入了一个回车,12被放入passwd数组中,而回车在缓冲区中,此时getchar正好读到缓冲区中的回车,程序结束。而加上fflush(stdin)语句后,缓冲区中的回车被清空,来获取用户输入。
请输入密码:>12
请确认密码(Y/N):>Y
确认成功
请按任意键继续. . .

2、ftell
long int ftell ( FILE * stream );

函数功能:返回文件指针位置。
#include<stdio.h>
int main()
{
FILE* pf = fopen(“test.txt”, “r”);
printf("%d\n", ftell(pf));
fclose(pf);
pf = NULL;
return 0;
}

执行后,结果为0, 当打开一个文件后,文件指针指向文件开始位置0.

3,fseek
int fseek ( FILE * stream, long int offset, int origin );

函数功能:移动文件指针到一个位置。
参数介绍:
offset
Binary files: Number of bytes to offset from origin.(距离origin的字节数)
origin
Position used as reference for the offset.
Constant Reference position
SEEK_SET Beginning of file
SEEK_CUR Current position of the file pointer
SEEK_END End of file *

#include<stdio.h>
int main()
{
FILE* pf = fopen(“test.txt”, “r”);
fseek(pf, 2, SEEK_SET);
printf("%d", ftell(pf));
fclose(pf);
pf = NULL;
return 0;
}

执行上面代码,结果是2.

4、setbuf setvbuf
void setbuf ( FILE * stream, char * buffer );
int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

函数功能:在打开文件后用户可以建立自己的文件缓冲区,而不使用由 fopen 函数打开文件所设定的默认缓冲区。
对于 setbuf 函数,当指定参数 buf 为 null 时,setbuf 函数将使得文件 I/O 不带缓冲。如下面的示例代码所示:
setbuf(fp, NULL);

对 setvbuf 函数来说,由于 setbuf 函数没有返回值,因此也无法确定 setbuf 函数的调用是否成功。在实际使用中,应该尽量使用 setvbuf 来替换 setbuf 函数,以验证流被成功地更改。如下面的示例代码所示:
if (setvbuf(file, buf, _LOFBF) != 0)
{
}

对 setvbuf 函数,则由 malloc 函数来分配缓冲区,参数 size 指明了缓冲区的长度(必须大于 0),而参数 mode 则表示缓冲的类型,取值如下所示:
_IOFBF,全缓冲。
_IOLBF,行缓冲。
_IONBF,不缓冲,此时忽略 buf 与 size 参数的值,直接读写文件,不再经过文件缓冲区缓冲。

5,rewind
函数功能:设置文件指针位置到文件开始。
void rewind ( FILE * stream );

执行下面代码,会打开一个文件内容为abc的文件,rewind会在循环内部设置文件指针位置,所以会循环打印字母a.
#include<stdio.h>
int main()
{
int i = 0;
int ch = 0;
FILE* pf = fopen(“test.txt”, “r”);
while((ch = getc(pf)) != EOF)
{
putc(ch, stdout);
rewind(pf);
}
fclose(pf);
pf = NULL;
return 0;
}

6,fgetpos
函数功能:返回当前文件指针位置。
int fgetpos ( FILE * stream, fpos_t * pos );

代码示例:
#include<stdio.h>
int main()
{
fpos_t pos = 0;
int ch = 0;
FILE* pf = fopen(“test.txt”, “r”);
while((ch = getc(pf)) != EOF)
{
putc(ch, stdout);
fgetpos(pf, &pos);
printf(" %d ", pos);
}
fclose(pf);
pf = NULL;
return 0;
}

上面代码打开文件内容为abc的文件,结果输出:a 1 b 2 c 3

7,fsetpos
函数功能:设置文件指针位置。
int fsetpos ( FILE * stream, const fpos_t * pos );

代码示例:
#include<stdio.h>
int main()
{
fpos_t pos = 2;
int ch = 0;
FILE* pf = fopen(“test.txt”, “r”);
fsetpos(pf, &pos);
printf("%d", ftell(pf));
fclose(pf);
pf = NULL;
return 0;
}

执行上面代码,结果是2.说明fsetpos设置当前文件指针位置成功。

8,feof
函数功能:其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)
int feof ( FILE * stream );

代码如下:
#include<stdio.h>
int main()
{
int n = 5;
int ch = 0;
FILE* pf = fopen(“test.txt”, “r”);
while(n–)
{
ch = getc(pf);
printf("%c",ch);
printf("%d", feof(pf));
}
fclose(pf);
pf = NULL;
return 0;
}

代开内容为dad的文件,执行结果:d0a0d01616请按任意键继续. . .

9,ferror
函数功能:,在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行函open数时,ferror函数的初始值自动置为0。
int ferror ( FILE * stream );

代码示例:
#include<stdio.h>
int main()
{
int n = 5;
FILE* pf = fopen(“test.txt”, “w”);
getc(pf);
if(ferror(pf))
{
printf(“打开文件错误\n”);
}
fclose(pf);
pf = NULL;
return 0;
}

执行上面代码:代开一个空文件test.txt,将会产生以下结果:打开文件错误。

10,clearerr
函数功能:clearerr的作用是使文件错误标志和文件结束标志置为0.假设在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。
void clearerr ( FILE * stream );

代码示例:
#include<stdio.h>
int main()
{
int n = 5;
FILE* pf = fopen(“test.txt”, “w”);
clearerr(pf);
getc(pf);
if(ferror(pf))
{
printf(“打开文件错误\n”);
}
clearerr(pf);
if(ferror(pf))
{
printf(“打开文件错误\n”);
}
fclose(pf);
pf = NULL;
return 0;
}

执行上面代码:代开一个空文件test.txt,将会产生以下结果:打开文件错误。

11,tmpfile
函数功能:创建一个临时二进制文件,打开以进行更新(“wb +”模式),文件名保证与任何其他现有文件不同。
当流关闭(fclose)或程序正常终止时,将自动删除创建的临时文件。 如果程序异常终止,则文件是否被删除取决于特定的系统和库实现。
FILE * tmpfile ( void );

12,remove
函数功能:删除名称在filename中指定的文件
int remove ( const char * filename );

13,rename
函数功能:将oldname指定的文件或目录的名称更改为newname。
这是直接在文件上执行的操作; 操作中不涉及流。
如果oldname和newname指定了不同的路径,并且系统支持此路径,则文件将移动到新位置。
如果newname命名现有文件,则该函数可能会失败或覆盖现有文件,具体取决于特定的系统和库实现。应提供适当的文件访问权限。
int rename ( const char * oldname, const char * newname )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值