linux c 关于文件操作的编程总结

来源:互联网 发布:建造者模式知乎 编辑:程序博客网 时间:2024/05/23 20:17

最近由于项目需要,一直在做关于linux环境下的服务端的开发,因此必不可少的就会有文件操作,线程,通信等这方面的一些积累和总结。


1、文件的读写操作fopen,fseek,fread,fwrite,fclose等

文件的读写作为最基本的操作,是我们必须要熟练的基本技能,因此对于文件读写的一些基本函数的使用也必须熟
练使用。我们要完成文件的操作就必须要用到文件指针FILE* fp,下面我结合fp说一下这些函数:

1). FILE* fopen(name, mode);

这个文件打开函数,是我们读写操作的第一个函数,其中参数name:文件名或者路径;  mode:文件的打开模式例如,“r”读,“w”写,“b”二进制等。该函数返回该文件的一个文件指针fp,否则返回NULL,所以使用必须做判断。

2). int fseek(fp, 0,SEEK_END);

该函数是文件指针的偏移,可以根据我们的需要,将文件指针偏移到指定的位置处开始读写,成功返回0,否则返回非零值。fp:该文件的文件指针,后面两个参数组合意思:以第三个参数为基准,偏移第二个参数个数的字节数,例如fseek(fp, 6, SEEK_SET), 从头开始偏移6个字节, 标题中的含义就是,从文件结尾处偏移0个字节,即将文件指针移动到文件尾,这样可以用ftell(fp),可以求出文件的长度大笑。这个函数的好处就是,循环读取一个文件的时候,就需要不断的进行文件偏移,来保证读取的数据的正确性。
其中第三个参数总共有三个位置:SEEK_SET (文件头)、SEEK_CUR(文件当前位置)、SEEK_END(文件尾).

3). size_t  fread(void* buffer, size_t size, size_t count,  FILE* stream);

该函数就是读文件的函数,参数buffer:存储的数据内存地址, size:每次读取的大小,count:读取的次数,stream:文件指针,返回值为每次读取的总字节数。参数buffer也可以是结构体,建议每次读取的size要尽量大一些,这样提高效率。

       4). size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

该函数为写文件的函数,参数buffer:输出的内存地址,size和count以及stream与上面类似。

5).int fclose(FILE* fp);

对文件操作完成后,千万要记住关闭文件,否则下次操作同一个文件将会失败,所以fclose(fp)使用也很重要,只要我们结束关于文件的操作,就必定要调用该函数。成功返回0,否则返回-1,有时候也需要对返回值进行检查,以确保正确关闭文件。关闭之后个人建议将文件指针赋值为空(fp=NULL),避免野指针的可能性。

6)int rename(const char* oldname, const char* newname)

这个函数主要用来对文件进行拷贝或者移动,比如将一个文件从当前目录移动到其他目录中。成功为0,否则返回-1.




0 0