標準輸入輸出服從規則和fileno,freopen,fdopen,ftell,fseek,rewind幾個函式
============================================================================
Name : quanhaunchong.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>//標準io庫,服從全緩衝
#include <stdlib.h>
//所有使用stdio這個庫的輸入輸出都得滿足這個全緩衝,行緩衝,不緩衝的規則。
//全緩衝:緩衝區內容滿了,才能寫道檔案中去,但是遇到return時會將緩衝區的內容強制寫道要寫道的檔案中去
//行緩衝:只要是遇到‘\n’時,就講緩衝區的內容寫道指定檔案中去
//不緩衝:這是特指stderr,標準出錯輸出時不經過緩衝區直接寫道標準輸入輸出中
int main(void) {
//全緩衝
printf("helloworld");
//fflush(stdout);//不滿也寫道標準輸出裡面中去,這是解決全緩衝的辦法
//行緩衝
printf("helloworld\n");
int i;
for(i=0;i<2;i++)
{
printf("helloworl");
}
//不緩衝,輸出的字為紅色,顯示為錯誤
fputs("hell9",stderr);
while(1);
return EXIT_SUCCESS;//程式退出會將緩衝區的內容強制重新整理到想要寫的檔案中去
}
fdopen:
|
fdopen(將檔案描述詞轉為檔案指標) |
相關函式
|
fopen,open,fclose |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
FILE * fdopen(int fildes,const char * mode); |
函式說明
|
fdopen()會將引數fildes 的檔案描述詞,轉換為對應的檔案指標後返回。引數mode 字串則代表著檔案指標的流形態,此形態必須和原先檔案描述詞讀寫模式相同。關於mode 字串格式請參考fopen()。 |
返回值
|
轉換成功時返回指向該流的檔案指標。失敗則返回NULL,並把錯誤程式碼存在errno中。 |
範例
|
#include<stdio.h> main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } |
執行
|
hello! |
freopen:
|
freopen(開啟檔案) |
相關函式
|
fopen,fclose |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
FILE * freopen(const char * path,const char * mode,FILE * stream); |
函式說明
|
引數path字串包含欲開啟的檔案路徑及檔名,引數mode請參考fopen()說明。引數stream為已開啟的檔案指標。Freopen()會將原stream所開啟的檔案流關閉,然後開啟引數path的檔案。 |
返回值
|
檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回NULL,並把錯誤程式碼存在errno 中。 |
範例
|
#include<stdio.h> main() { FILE * fp; fp=fopen(“/etc/passwd”,”r”); fp=freopen(“/etc/group”,”r”,fp); fclose(fp); } |
fileno:
|
fileno(返回檔案流所使用的檔案描述詞) |
相關函式
|
open,fopen |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
int fileno(FILE * stream); |
函式說明
|
fileno()用來取得引數stream指定的檔案流所使用的檔案描述詞。 |
返回值
|
返回檔案描述詞。 |
範例
|
#include<stdio.h> main() { FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d\n”,fd); fclose(fp); } |
執行
|
fd=3 |
/*
============================================================================
Name : CDX.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(void) {
FILE *fp=NULL;
//重定向cat main.c>txt:將mian,c裡面的內容輸入到txt裡面去
fp=fopen("hello.txt","w");
if(fp==NULL)
{
perror("open error");
return 0;
}
// fp=freopen(“/etc/group”,”r”,fp);
freopen("world.txt","w+",fp);
fputs("helloweotd",fp);
//fieno
int fd;
fd=fileno(fp);
printf("fd=%d\n",fd);
fclose(fp);
FILE * fp1 =fdopen(0,"w+");
fprintf(fp1,"%s\n","hello!");
//puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
ftell:
|
ftell(取得檔案流的讀取位置) |
相關函式
|
fseek,rewind,fgetpos,fsetpos |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
long ftell(FILE * stream); |
函式說明
|
ftell()用來取得檔案流目前的讀寫位置。引數stream為已開啟的檔案指標。 |
返回值
|
當呼叫成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤程式碼。 |
錯誤程式碼
|
EBADF 引數stream無效或可移動讀寫位置的檔案流。 |
範例
|
參考fseek()。 |
|
fseek(移動檔案流的讀寫位置) |
相關函式
|
rewind,ftell,fgetpos,fsetpos,lseek |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
int fseek(FILE * stream,long offset,int whence); |
函式說明
|
fseek()用來移動檔案流的讀寫位置。引數stream為已開啟的檔案指標,引數offset為根據引數whence來移動讀寫位置的位移數。 |
引數
|
whence為下列其中一種: SEEK_SET從距檔案開頭offset位移量為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往後增加offset個位移量。 SEEK_END將讀寫位置指向檔案尾後再增加offset個位移量。 當whence值為SEEK_CUR 或SEEK_END時,引數offset允許負值的出現。 下列是較特別的使用方式: 1) 欲將讀寫位置移動到檔案開頭時:fseek(FILE *stream,0,SEEK_SET); 2) 欲將讀寫位置移動到檔案尾時:fseek(FILE *stream,0,0SEEK_END); |
返回值
|
當呼叫成功時則返回0,若有錯誤則返回-1,errno會存放錯誤程式碼。 |
附加說明
|
fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。 |
|
rewind(重設檔案流的讀寫位置為檔案開頭) |
相關函式
|
fseek,ftell,fgetpos,fsetpos |
表標頭檔案
|
#include<stdio.h> |
定義函式
|
void rewind(FILE * stream); |
函式說明
|
rewind()用來把檔案流的讀寫位置移至檔案開頭。引數stream為已開啟的檔案指標。此函式相當於呼叫fseek(stream,0,SEEK_SET)。 |
返回值
|
|
範例
|
參考fseek() |
#include <stdio.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(int argc,char **argv) {
//函式:fseek(file *stream,long off_set,int wherece)可以使檔案指標移到檔案中的指定位置
//long ftell(file *stream,fpos_t *pos);
FILE *fp;
int i;
char buf[9][10];
fp=fopen("/home/wzm/workspace1/filesuiji/src/tab.dat","r");
if(fp==NULL)
{
perror("open error");
return -1;
}
//把檔案指標移動30個位置
fseek(fp,30,SEEK_SET);
//輸出當前的指標位置
printf("current file position[%ld]\n",ftell(fp));
for(i=0;i<6;i+=3)
{
fscanf(fp,"%10s%10s%10s\n",buf[i],buf[i+1],buf[i+2]);
printf(fp,"%s%s%s\n",buf[i],buf[i+1],buf[i+2]);
}
fclose(fp);
return EXIT_SUCCESS;
}
相關文章
- Linux的標準輸入、標準輸出和標準錯誤Linux
- Java —— 標準輸入輸出Java
- C語言中輸入輸出重定,freopen()妙用。C語言
- python 標準輸入輸出Python
- 常用輸入輸出函式函式
- 輸出輸入函式彙總函式
- 接管子程式的標準輸入輸出
- 重定向子程式標準輸入輸出
- C#中幾個正規表示式匹配輸入字元的函式C#字元函式
- 【C++】標準檔案的輸入輸出!!!C++
- Linux循序漸進(20):標準輸入/輸出和重定向(轉)Linux
- C++名稱空間、標準輸入輸出、引用C++
- 一、輸入一個數(這裡用函式實現) 1.輸出它是幾位數 2.逆序輸出 3.正序輸出函式
- 從標準輸入流中讀取並執行shell指定函式函式
- C語言——常用標準輸入輸出函式 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字串拷貝函式 strcpy(), strncpy(), strchr(), strstr()函式用法特點C語言函式字串
- converter設計模式擴充套件,多種輸入輸出與標準輸入輸出的轉化方案設計模式套件
- ncurses輸出函式:字元+字串的輸出函式字元字串
- ncurses輸入函式:字元+字串的輸入函式字元字串
- 新手學python之Python的輸入輸出函式Python函式
- C中的基本輸入輸出函式(Android之JNI)函式Android
- 關於友元函式過載輸入輸出運算子函式
- fseek函式(轉)函式
- Python 輸入和輸出Python
- 使用LINUX dup2 複製檔案描述符到標準輸出STDOUT_FILENOLinux
- 使用shell tee 命令顯示及儲存標準輸出及標準錯誤輸出
- 【Java基礎知識】IO流--標準輸入輸出流、列印流PrintStreamJava
- 【C語言】編寫一個程式從標準輸入讀取字元,並把他們寫到標準輸出。除了大寫字母轉換成小寫字母之外,其他的原樣輸出。C語言字元
- 寫一個函式,輸入一個4位數字,要求輸出這4個數字字元函式字元
- 015 Linux 標準輸入輸出、重定向、管道和後臺啟動程式命令Linux
- python呼叫外部子程式,通過管道實現非同步標準輸入和輸出的Python非同步
- Python輸入和輸出(IO)Python
- 格式化輸入和輸出
- C語言的本質(24)——C標準庫之輸入與輸出(下)C語言
- 一.fileno()函式函式
- Shell標準輸出、標準錯誤 >/dev/null 2>&1devNull
- 輸入輸出
- c++builder中怎樣進行標準輸入、出C++UI
- java截獲標準輸出(2)(轉)Java