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); }