文件操作

      写个读MP3文件程序才发现自己对c的文件操作太不了解了。资料整理如下:

  FILE *fopen(const char *filename, const char *mode);<stdio.h>

  打开模式选项常见的"w","r","a","w+","r+"(文件必须存在),"a+"操作ASCII文件,"b"表示操作二进制文件。函数成功执行返回文件指针,否则返回null。

  int _sopen(const char *filename, int oflag, int shflag[ ,int pmode]);<io.h>\<fcntl.h>\<sys/types.h>\<sys/stat.h>\<share.h>

  errno_t _sopen_s(int *pfh, const char *filename, int oflag, int shflag,

  int pmode);<io.h>\<fcntl.h>\<sys/types.h>\<sys/stat.h>\<share.h>

  以共享形式打开文件,打开模式oflag:_O_APPEND追加模式;_O_BINARY二进制(未转义成ASCII)模式;_O_CREAT创建并写新文件......

  共享模式shflag:_SH_DENYRW拒绝其它程序的读写操作,_SH_DENYWR拒绝其它程序写,_SH_DENYRD拒绝其它程序读,_SH_DENYNO允许读写

  当oflag为_O_CREAT时pmode才需要,如果文件不存在,pmode指定文件权限,否则,pmode可以被忽略

  函数成功执行,返回文件描述符,否则返回-1

  int _fstat(int fd, struct _stat *buff);<sys/stat.h>\<sys/types.h>

  获取打开文件信息

  fd:打开文件描述符。buff:指向存储结果的结构体

  获取文件信息成功返回0,否则-1

  注意定义在<sys/stat.h>中的struct stat

  struct stat {
        _dev_t st_dev;
        _ino_t st_ino;
        unsigned short st_mode;
        short st_nlink;
        short st_uid;  //用户id
        short st_gid;  //组id
        _dev_t st_rdev;
        _off_t st_size;  //文件大小
        time_t st_atime;  //最后访问文件时间
        time_t st_mtime;  //最后修改文件时间

        time_t st_ctime;  //文件创建时间
        };

  size_t fread(void *buff, size_t size, size_t count, FILE *stream);<stdio.h>

  size_t fwrite(void *buff, size_t size, size_t count, FILE *stream);<stdio.h>

  int fscanf(FILE *stream, const char *format[, argument]...);<stdio.h>

  int fprintf(FILE *dtream, const char *format[, argument]...);<stdio.h>

  文件读写时最好用fread与fwrite,不会因为文件中有NULL而文件并未结束而终止读写

  测试文件是否结束

  int feof(FILE *stream);<stdio.h>

  0文件结束,非0文件

原文地址:https://www.cnblogs.com/littlejohnny/p/1778244.html