程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中的setlinebuf()、utmpname()、rewind函數應用

C說話中的setlinebuf()、utmpname()、rewind函數應用

編輯:關於C++

C說話中的setlinebuf()、utmpname()、rewind函數應用。本站提示廣大學習愛好者:(C說話中的setlinebuf()、utmpname()、rewind函數應用)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中的setlinebuf()、utmpname()、rewind函數應用正文


C說話setlinebuf()函數:設置文件流為線性緩沖區
頭文件:

#include <stdio.h>

界說函數:

void setlinebuf(FILE * stream);

函數解釋:setlinebuf()用來設置文件流以換行動根據的無緩沖IO. 相當於挪用:setvbuf(stream, (char*)NULL, _IOLBF, 0);請參考setvbuf().

C說話utmpname()函數:設置文件途徑
頭文件:

#include <utmp.h>

界說函數:

void utmpname(const char * file);

函數解釋:utmpname()用來設置utmp 文件的途徑, 以供給utmp 相干函數的存取途徑. 假如沒有應用utmpname()則默許utmp 文件途徑為/var/run/utmp。

C說話rewind()函數:將文件指針從新指向文件開首
頭文件:

 #include <stdio.h>

rewind()函數用於將文件指針從新指向文件的開首,同時消除和文件流相干的毛病和eof標志,相當於挪用fseek(stream, 0, SEEK_SET),其原型以下:

  void rewind(FILE * stream);

【參數】stream為以翻開文件的指針。

留意:精確的說,這裡的指針不是文件指針stream,而是文件外部的地位指針,跟著對文件的讀寫文件的地位指針(指向以後讀寫字節)向後挪動。而文件指針是指向全部文件,假如不從新賦值文件指針不會轉變。

文件指針FILE *stream中,包括一個讀寫地位指針char *_nextc,它指向下一次文件讀寫的地位。其構造以下:

typedef struct
{
  int _fd; // 文件號
  int _cleft; // 緩沖區中剩下的字節數
  int _mode; // 文件操作形式
  char * _nextc; // 下一個字節的地位
  char * _buff; // 文件緩沖區地位
}FILE;

每當停止一次讀寫後,該指針主動指向下一次讀寫的地位。當文件剛翻開或創立時,該指針指向文件的開端地位。可以用函數ftell()取得以後的地位指針,也能夠用rewind()/fseek()函數轉變地位指針,使其指向須要讀寫的地位。

【實例】讀取文件的數據後再回到開首從新讀取。

#include<iostream.h>
#include<stdio.h>
void main(void)
{
  FILE* stream;
  long l;
  float fp;
  char s[81];
  char c;
  stream = fopen("fscanf.txt","w+");
  if(stream == NULL)/*翻開文件掉敗*/
  {
    printf("the file is opeaned error!\n");
  }
  else/*勝利則輸入信息*/
  {
    fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x');
    fseek(stream,0L,SEEK_SET);      /*定位文件讀寫指針*/
    fscanf(stream,"%s",s);
    printf("%ld\n",ftell(stream));
    fscanf(stream,"%ld",&l);
    printf("%ld\n",ftell(stream));
    fscanf(stream,"%f",&fp);
    printf("%ld\n",ftell(stream));
    fscanf(stream," %c",&c);
    printf("%ld\n",ftell(stream));
    rewind(stream);/*指向文件開首*/
    fscanf(stream,"%s",s);
    printf("%s\n",s);
    fclose(stream);/*封閉流*/
  }
}

運轉成果:

8
13
22
24
a_string

法式先創立一個文件寫入一些數據,然後應用feeek函數定位文件指針到文件開首逐一讀取數據,讀取終了後應用rewind函數將文件的讀/寫指針從新定位到文件的開首,再次讀取時發明讀取的是開首的字符a_string。

又如,把一個文件的內容顯示在屏幕上,並同時復制到另外一個文件。

#include "stdio.h"
void main()
{
  FILE *fp1, *fp2;
  fp1 = fopen("file1.c", "r"); // 源文件
  fp2 = fopen("file2.c", "w"); // 復制到file2.c
  while(!feof(fp1)) putchar(fgetc(fp1)); // 顯示到屏幕上
  rewind(fp1);  // fp回到開端地位
  while(!feof(fp1)) fputc(fgetc(fp1), fp2);
  fclose(fp1);
  fclose(fp2);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved