當前位置:首頁 » 編程語言 » c語言文件系統

c語言文件系統

發布時間: 2023-05-27 18:11:53

c語言基礎 之 文件基礎

所謂文件一般是指存儲在外部介質上的 數據集合 。一批數據是含頌以 文件 的形式存放在外部介質的。操作系統是以文件為單位對數據進行管理的。
按數據的組織方式,數據文件可以分為有 結構文件 無結構文件 兩類。

C語言使用的是 流式文件 。常見的 文本談兄鄭文件 二進制文件 屬於流式文件。
ANSI C 標准 對文件的處理方法是 「緩沖文件系統」 ,系統為每個打開文件在內存中開辟一個緩沖區。寫文件時(從內存向磁碟輸出數據),先送到緩沖區中,當緩沖區裝滿後才送到磁碟中去。讀文件時,也經過緩沖區。這樣做是為了提高讀寫效率,因為磁碟訪問更耗時,一次讀寫一塊數據, 比每次讀寫單個字元更經濟。

緩沖文件系統中,關鍵的概念是 「文件指針」 。每個被用的文件都在內存中開辟一個區,用來存放文件的名字、狀態、位置等有關信息,這些信息是保存在個結構塵棗體類型的變數中的。該結構體類型是由系統定義的,取名為FILE。有的C語言版本在stdio.h 文件中有以下類型定義。

有了FILE類型之後,可以用它定義若干個FILE結構體類型的變數,以便存放若干個文件信息。
稱指向FILE結構體類型的變數為文件類型指針,稱為文件指針。定義文件指針的一般形式:
FILE * 指針變數名;
通常把打開文件的FILE結構的首地址賦給文件指針。

在文件操作時,首先要打開文件,獲得對該文件的指針。通過該指針,就可以獲取對文件進行操作所需的信息。將該指針傳遞給相應的庫函數,庫函數就能通過這個信息,通過操作系統提供的文件系統調用,來完成低級且復雜的硬體操作,如磁碟的讀與。

在C語言中,調用庫函數fopen打開文件。該函數的調用方式通常為:

說明:
①函數的兩個參數「文件名」和「使用文件方式」均為字元串,其中表示文件名的字元串可以包含文件的存儲路徑,否則表示文件存儲在當前目錄下。
②使用文件的方式及其含義如表8-1所示。

例如:

其意義是在當前目錄下打開文件file1.txt,只允許進行「讀」操作,並使fp指向file.txt。

其意義是在example目錄下打開文件file2.txt,只允許進行「寫」操作,並使fp指向file2.txt。

文件使用完畢,必須將其關閉以免發生文件數據丟失等錯誤。
關閉文件可調用庫函數fclose來實現。
該函數的使用格式通常為:
fclose(文件指針);
說明:
將文件指針與文件脫離聯系。如果成功進行關閉操作時,函數返回0,否則返回非0。
例如:
flose(fp); //關閉文件指針fp指向的文件

㈡ 怎樣用c語言實現磁碟文件系統的操作

部分代碼:

#include "stdio.h"
#include "conio.h"

struct filesys_superblk
{ /*文件系統的分區信息,存放在0#物理塊中哪稿扮*/
unsigned long fs_size; /*整個李灶分區的總磁碟物理塊數 */
unsigned long fs_freesize; /*分區的所有空閑磁碟物理塊數 */
unsigned int fs_blocksize; /*文件系統的物理塊大小(位元組)*/
unsigned int fs_fat_start; /*FAT的起始磁碟物理塊號 */
unsigned int fs_fat_size; /*FAT佔用的磁碟物理塊數*/
unsigned int fs_dir_start; /*根目錄的起始磁碟物理塊號*/
unsigned int fs_dir_size; /*根目錄佔用的磁碟物理塊數*/
unsigned int fs_data_start; /*數據區起始磁碟物理塊號*/
unsigned long fs_data_size; /敬罩*數據區的磁碟物理塊數*/
};
struct FILE_FCB
{ /*文件控制塊結構 */
char f_name[16]; /*文件名(16B)*/
short f_mode; /*文件屬性,-1表示未用 0表示目錄 1表示文件*/
unsigned int f_asize; /*文件分配的大小(物理塊數)*/
unsigned long f_rize; /*文件佔用的實際大小(位元組)*/
unsigned long f_addr; /*文件分配的第一個物理塊的塊號*/
unsigned int f_ctime; /*文件創建時間*/
unsigned int f_mtime; /*文件修改時間*/
};

㈢ C語言中,什麼是緩沖文件系統和文件緩沖區

目前c語言使用的文件系統分為緩沖文件系統(標准i
/
o)和非緩沖文件系統(系統i
/
o)。緩沖文件系統的特點是:在內存開辟一個「緩沖區」,為程序中的每一個文件使用,當執
行讀文件的操作時,從磁碟文件將數據先讀入內存「緩沖區」,裝滿後再從內存「緩沖區」依此讀入接收的變數。執行寫文件的操作時,先將數據寫入內存「緩沖區」,待內存「緩沖區」裝滿後再寫入文件。
因此當程序運行時雖然進行了寫數據操作,但是如果寫入的數據沒有裝滿內存中的緩沖區,就不會將數據寫入到磁碟文件中。當程序運行結束後,系統就會將緩沖區中的數據寫入到磁碟上的文件中,因此就可以看到文件中的內容。
常用的fopen命令就會使用文件讀寫緩沖區,fclose命令關閉文件,把緩沖區中的內容寫入磁碟上的文件中。詳見:
http://study.qqcf.com/web/171/19812.htm

㈣ c語言編程問題(文件系統)

#include<stdio.h>
intmain(intargc,char*argv[]){
FILE*fpi,*fpo;
inti,k,f[5]={0};
chars[5][7]={"90~100","80~89","70~79","60~69","<升埋和60"};
fpi=fopen("data1.txt","r");
fpo=fopen("data2.txt","w");
液枝if(fpo==NULL||fpi==NULL){
printf("Openthefile(s)failure... ");
return0;
}
while(fscanf(fpi,"%d",&k)==1){
if(k>吵盯=90&&k<=100)
f[0]++;
elseif(k>=80&&k<=89)
f[1]++;
elseif(k>=70&&k<=79)
f[2]++;
elseif(k>=60&&k<=69)
f[3]++;
elseif(k<60)
f[4]++;
}
fclose(fpi);
for(i=0;i<5;i++){
fprintf(fpo,"%.2f",f[i]/30.0);
printf("%s: %.2f ",s[i],f[i]/30.0);
}
fclose(fpo);
return0;
}

㈤ 如何用c語言編寫簡單的操作系統

C語言當然是可以寫操作系統的,但是操作系統的編寫一般都不僅僅只是用C語言編寫的。

寫操作系統需要編程語言提供以下幾個特徵:
1、跨平台,不能是只在某個平台下編譯(VB就不行);
2、必須是編譯型語言(PHP就不行),或者有一個非常高效的解釋器;
3、必須有方便的操作硬體的功能,容易嵌入匯編(Java就不行);
4、兼容性要好,最好不同編譯器編譯的符號要基本相同,容易鏈接(C++不行,如果放棄Class的話C++基本可以);
5、編譯器本身最好是由該語言自己完成的(大部分語言的編譯器都是用C/C++寫的);
6、開發者可以很方便的擴展、改造、或者使用第三方的運行庫(大部分語言的庫都無法修改);
7、開發者眾多(小眾語言就不行);
8、該語言開發操作系統的資料要足夠完善。
所以總結下來,C語言是首選。

㈥ 如何用C語言實現fat32文件系統

#include <stdio.h>
#include <stdlib.h> //為了使用exit()
int main()
{
char ch;
FILE* fp;
char fname[50]; //用於存放文件名
printf("輸入文件名:");
scanf("%s",fname);
fp=fopen(fname,"r"); //只供讀取
if(fp==NULL) //如果失敗了
{
printf("錯誤!");
exit(1); //中止程序
}
//getc()用於在打開文件中獲取一個字元
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp); //關閉文件
return 0;
}
注意!初學者往往會犯一個錯誤,即在輸入文件名時不加後綴名,請注意加上!
程序示例2[2]
#include <stdio.h>
FILE *stream, *stream2;
int main( void )
{
int numclosed;
// Open for read (will fail if file "crt_fopen.c" does not exist)
if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
// Note: fopen is deprecated; consider using fopen_s instead
printf( "The file 'crt_fopen.c' was not opened\n" );
else
printf( "The file 'crt_fopen.c' was opened\n" );
// Open for write
if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );
// Close stream if it is not NULL
if( stream)
{
if ( fclose( stream ) )
{
printf( "The file 'crt_fopen.c' was not closed\n" );
}
}
// All other files are closed:
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372