Linux系统编程-文件位置函数和缓冲区刷新函数

fseek函数

fseek的用法

offset是偏移量大小(可正可负),whence是偏移的相对位置。

whence可以为SEEK_SET文件首,SEEK_CUR文件当前位置,SEEK_END文件尾。

返回值

操作成功返回0,否则返回1。

ftell函数

反映文件位置指针当前所在的位置。

rewind函数

rewind是将文件位置指针seek到文件开始处,是用fseek函数封装的。

fflush函数

fflush的用法

当参数为空时,所有流都被刷新

例子

代码1

因为printf函数将数据写入标准输出缓冲区,标准输出缓冲区时行缓冲,换行时刷新,所以这里什么都不输出。

#include <stdio.h>
#include <stdlib.h>

/*
 * 缓冲区的作用:大多数情况下是好事,合并系统调研
 *
 *行缓冲:换行时候刷新,满了的时候刷新,强制刷新(标准输出是这样的)
 *
 *全缓冲:满了的时候刷新,强制刷新(默认,只要不是终端设备)
 *
 *无缓冲:如stderr,需要立即输出的内容

    setvbuf
 * */

int main()
{
   int i;
 
   printf("Before while()");  
   
   while(1);

   printf("After while()");

   exit(0);
}

代码2

在printf最后增加换行符,刷新缓冲区。

#include <stdio.h>
#include <stdlib.h>


int main()
{
   int i;
 
   printf("Before while()\n");  

   while(1);

   printf("After while()\n");
  
   exit(0);
}

代码3

使用fflush刷新缓冲区

#include <stdio.h>
#include <stdlib.h>


int main()
{
   int i;
 
   printf("Before while()");  
   fflush(stdout);

   while(1);

   printf("After while()");
   fflush(NULL);
   exit(0);
}

使用fseek和ftell计算文件大小

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    FILE *fp;
    int count = 0;

    if (argc < 2)
    {
	fprintf(stderr, "Usage...\n");
	exit(1);
    }

    fp = fopen(argv[1], "r");
    if (fp == NULL)
    {
        perror("fopen():");
	exit(1);
    }

    fseek(fp, 0, SEEK_END);
    printf("%ld\n", ftell(fp));
    
    fclose(fp);
    exit(0);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值