当前位置:首页 » 编程语言 » 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