Linux_1_文件—文件和目录操作

来源:互联网 发布:手机淘宝降价提醒 编辑:程序博客网 时间:2024/05/23 12:03
* 库函数和系统调用的区别在于系统调用能够让你直接访问Linux内核提供的服务,比如前面学到的read、write函数就是基于系统调用的函数。* 系统调用函数存在与内核空间,库函数都是用户模式,所以系统调用不当可能会破坏系统,但库函数调用风险就要小很多。* 库函数堆I/O操作进行缓冲,减少了系统调用开销,同时可移植行也更好。* 打开和关闭文件FILE *p fopen(const char *path,const char *mode);int fclose(FILE *stream);* fopen以mode模式打开名为path的文件* fopen返回一个文件指针* 出现错误,fopen返回NULL,并把errno设置为恰当值。* 参数 mode 指向一个字符串,以下列序列之一开始 (序列之后可以有附加的字符):   r      打开文本文件,用于读。流被定位于文件的开始。   r+     打开文本文件,用于读写。流被定位于文件的开始。   w      将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始。   w+     打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。   a      打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。   a+     打开文件,用于追加(在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。* 如果把Linux中二进制文件转到Windows上需要更改参数,在后面加一个b

“rb”
打开一个用于读取的二进制文件
“wb”
创建一个用于写入的二进制文件
“ab”
附加到一个二进制文件
“rb+”
打开一个用于读/写的二进制文件
“wb+”
创建一个用于读/写的二进制文件
“ab+”
打开一个用于读/写的二进制文件

* 读写文件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);* 参数pty指向缓冲区保存或读取的数据* 参数size控制记录大小,每次读取数据的大小* 参数nmemb为记录数* 函数返回读取或回写的记录数,1/0* fread函数分析
FILE *p=fopen("a.txt","r+");if(p==NULL){    printf("error is %s",strerror(errno));}else{printf("SUCCESS\n");char buf[100];memset(buf,0,sizeof(buf));size_t rc=fread(buf,sizeof(buf),1,p);//1是记录数,可以是2、3、4、5...                    //可以这样理解,我每次读取一条记录,这条记录的大小是sizeof(buf)while(1){    size_t tmp=fread(buf,1,10,p);//第二个参数表示每次读取记录的大小,读一个字节                                            //第三个参数表示每次读取多少记录行,读10个记录行                                            //返回的是每次读取的记录行,到文件最后没有把10行记录行读满,则返回所读的记录行    rc+=tmp;if(tmp== 0)    break;}fclose(p);}

二进制读取文件

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>struct person{     int id;     char name[20];     int age;     int sex;     char tel[20];};int Write(void){     char path[20] = "1.txt";     FILE *p = fopen(path, "w");//在windows下读取二进制文件,则文件读写方式符为wb\rb     if (p == NULL)     {          printf("error is %s", strerror(errno));     }     else     {          printf("SUCCESS\n");          struct person MEN[20];          memset(&MEN, 0, sizeof(MEN));          MEN[0].age = 22;          strcpy(MEN[0].name, "苍老师");          MEN[0].age = 19;          MEN[0].sex = 0;          strcpy(MEN[0].tel, "100");          MEN[1].age = 19;          strcpy(MEN[1].name, "饭岛爱");          MEN[1].age = 19;          MEN[1].sex = 0;          strcpy(MEN[1].tel, "101");          fwrite(&MEN, sizeof(struct person), 2, p);          fclose(p);     }     return 0;}int Read(void){     char path[20] = "1.txt";     FILE *p = fopen(path, "r");     if (p == NULL)     {          printf("error is %s\n", strerror(errno));     }     else     {          printf("Read Success\n");          struct person man;          while (1)          {              size_t a = fread(&man, sizeof(struct person), 1, p);              if (a == 0)                   break;              printf("名字:%s\n年龄:%d\n电话:%s\n", man.name, man.age,man.tel);          }          fclose(p);     }     return 0;}int main(void){     Read();     return 0;}
原创粉丝点击