C语言在Linux下的文件、目录、时间操作

@[TOC]文件目录时间管理

一、 文件操作

根据文件中数据组织形式的不同,可以分为文本文件和二进制文件,c语言源代码是文本文件,编译成可执行的程序是二进制文件。c语言操作文件时,必须先打开文件,进行读写完成后,再关闭文件。

操作文件的时候,C语言为文件分配一个信息区,该信息区包含文件描述信息、缓冲区位置、缓冲区大小、文件读写到的位置等基本信息,这些信息用一个结构体来存放(struct _IO_FILE),这个结构体有一个别名FILE(typedef struct _IO_FILE FILE),FILE结构体和对文件操作的库函数在 stdio.h 头文件中声明的。

结构体声明:

struct_iobuf{
           
char*_ptr;        
int  _cnt;        
char*_base;        
int  _flag;        
int  _file;        
int  _charbuf;        
int  _bufsiz;        
char*_tmpfname;        
};typedefstruct_iobufFILE;

1.文件的打开

c语言的库函数提供fopen来创建一个新的文件或者打开已有的文件,调用fopen之后返回一个文件指针File*
打开文件的时候,fopen函数中会动态分配一个FILE结构体大小的内存空间,并把FILE结构体内存的地址作为函数的返回值,程序中用FILE结构体指针存放这个地址
关闭文件的时候,fclose函数除了关闭文件,还会释放FILE结构体占用的内存空间。
函数原型如下:

FILE *fopen(const char *path, const char *mode);

path是字符串,表示要打开的文件名,可以包含目录名,如果没有包含路径表示程序运行的当前路径,一般采取全路径。
mode也是字符串,表示打开文件的方式。

方式 说明
r 只读,文件必须存在否则打开失败
w 只写,如果文件存在,则清除原文内容;如果不存在,则新建文件
a 追加只写,如果文件存在,则打开;如果不存在,则新建文件
r+ 读写,文件必须存在。在只读r的基础上增加可写功能
w + 读写,在w的方式上增加可读功能
a+ 读写,在a的方式上增加可读功能
例如:
if ( (fp=fopen("/root/Block/test.c","r")) == 0 )

fp为文件指针,存储fopen函数的返回的值

2.文件的关闭

函数声明:

int fclose(FILE *fp);

fp为fopen函数返回的文件指针

3.文本文件的读写

实际快发中,文本文件以行的形式存放字符串,如c程序源代码或者一段文字,所以是按行写入和读取数据。

(1)向文件中写入数据

函数声明:

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

Description:The functions in the printf() family produce output according to a format as described below.fprintf() and vfprintf() write output to the given output stream;
stream为函数返回的文件指针,一般不关心其值,format为字符串,表示写入的内容

例如:

 fprintf(fp,"这是第%d个数字。\n",i+1);

(2)从文件中读取数据

函数声明:

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

fgets的功能是从文件中读取不超过size大小字的符数据存储到s指向的(地址)缓存区里。stream为待读取文件的文件指针。
Description:fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s.

例如:

while (1)
  {
   
    memset(strbuf,0,sizeof(strbuf));	 //初始化
    if (fgets(strbuf,301,fp)==0) break;  //fgets()==0,即为真,读取成功;若为-1,读取失败
    		 
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值