国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux輸入輸出與文件

2024-06-28 13:21:10
字體:
來源:轉載
供稿:網友
linux輸入輸出與文件1. 基于文件指針的文件操作(緩沖)

linux中對目錄和設備的操作都是文件操作,文件分為普通文件,目錄文件,鏈接文件和設備文件。

1.1. 文件的創建,打開與關閉

原型為:

#include <stdio.h> //頭文件包含

FILE *fopen(const char *pach,const char *mode); //文件名 模式

int fclose(FILE *stream);

fopen以mode的方式打開或創建文件,如果成功,將返回一個文件指針,失敗則返回NULL.

fopen創建的文件的訪問權限將以0666與當前的umask結合來確定。

1.2. 讀寫文件

基于文件指針的數據讀寫函數較多,可分為如下幾組:

數據塊讀寫:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

fread從文件流stream 中讀取nmemb個元素,寫到ptr指向的內存中,每個元素的大小為size個字節。

fwrite從ptr指向的內存中讀取nmemb個元素,寫到文件流stream中,每個元素size個字節。

所有的文件讀寫函數都從文件的當前讀寫點開始讀寫,讀寫完以后,當前讀寫點自動往后移動size*nmemb個字節。

1.3.文件定位:

文件定位指讀取或設置文件當前讀寫點,所有的通過文件指針讀寫數據的函數,都是從文件的當前讀寫點讀寫數據的。

常用的函數有:

#include <stdio.h>

int feof(FILE * stream); //通常的用法為while(!feof(fp))

int fseek(FILE *stream, long offset, int whence);//設置當前讀寫點到偏移whence 長度為offset處

long ftell(FILE *stream); //用來獲得文件流當前的讀寫位置

void rewind(FILE *stream); //把文件流的讀寫位置移至文件開頭 èfseek(fp, 0, SEEK_SET);

feof判斷是否到達文件末尾的下一個(注意到達文件末尾之后還會做一次)

fseek設置當前讀寫點到偏移whence 長度為offset處,whence可以是:

SEEK_SET (文件開頭 –>0)

SEEK_CUR (文件當前位置 –>1)

SEEK_END (文件末尾 –>2)

ftell獲取當前的讀寫點

rewind將文件當前讀寫點移動到文件頭

1.4.格式化讀寫:

#include <stdio.h>

int PRintf(const char *format, ...); //相當于fprintf(stdout,format,…);

int scanf(const char *format, …);

int fprintf(FILE *stream, const char *format, ...);

int fscanf(FILE *stream, const char *format, …);

int sprintf(char *str, const char *format, ...); // eg: sprintf(buf,”the string is;%s”,str);

int sscanf(char *str, const char *format, …);

以f開頭的將格式化后的字符串寫入到文件流stream中

以s開頭的將格式化后的字符串寫入到字符串str中

1.5.單個字符讀寫:

使用下列函數可以一次讀寫一個字符

#include <stdio.h>

int fgetc(FILE *stream);

int fputc(int c, FILE *stream);

int getc(FILE *stream); è 等同于 fgetc(FILE* stream)

int putc(int c, FILE *stream); è 等同于 fputc(int c, FILE* stream)

int getchar(void); è 等同于 fgetc(stdin);

int putchar(int c); è 等同于 fputc(int c, stdout);

getchar和putchar從標準輸入輸出流中讀寫數據,其他函數從文件流stream中讀寫數據。

1.6.字符串讀寫:

char *fgets(char *s, int size, FILE *stream);

int fputs(const char *s, FILE *stream);

int puts(const char *s); è 等同于 fputs(const char *s, int size, stdout);

char *gets(char *s); è 等同于 fgets(const char *s, int size, stdin);

fgets和fputs從文件流stream中讀寫一行數據;

puts和gets從標準輸入輸出流中讀寫一行數據。

fgets可以指定目標緩沖區的大小,所以相對于gets安全,但是fgets調用時,如果文件中當前行的字符個數大于size,則下一次fgets調用時,將繼續讀取該行剩下的字符,fgets讀取一行字符時,保留行尾的換行符。

fputs不會在行尾自動添加換行符,但是puts會在標準輸出流中自動添加一換行符。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仁怀市| 万山特区| 新河县| 北川| 莱阳市| 海丰县| 安徽省| 古蔺县| 瑞金市| 巴彦淖尔市| 庆元县| 荔浦县| 铜川市| 胶州市| 志丹县| 修武县| 杨浦区| 海淀区| 岳阳市| 奉节县| 汕头市| 清水河县| 纳雍县| 文成县| 雅江县| 望江县| 梅河口市| 永州市| 韶山市| 天等县| 丹寨县| 宁国市| 嘉鱼县| 鹤山市| 正定县| 江陵县| 横山县| 巴马| 清苑县| 东乌珠穆沁旗| 乐至县|