当前位置: 首页 > 工具软件 > Bangle.io > 使用案例 >

IO——文件IO

姚子石
2023-12-01

一、文件IO与标准IO的区别:

标准IO :
  遵循ANSIC标准   有缓冲区(标准错误stderr没有)  高级IO   通过流进行操作   适用于普通文件(.c/.h/.sh等)


文件IO:
  遵循POSIX标准 无缓冲  低级IO  通过文件描述符进行操作 适用于特殊文件(设备文件)

文件描述符:是一个非负整数,用于对文件的标识;
                      系统默认打开的文件描述符: 0 (标准输入stdin)、1 (标准输出stdout) 、2 (标准错误stderr) 

二、 文件的打开:

open{
  函数原型:
      #include <sys/types.h>   (头文件)
       #include <sys/stat.h>
       #include <fcntl.h>
   int open(const char *pathname, int flags);
    功能:打开一个已经存在的文件;
    参数:
        pathname:文件名(可以包含路径)
        flags:文件的打开方式
                 O_RDONLY 只读
                 O_WRONLY 只写
                 O_RDWR      读写
      返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;
  
   int open(const char *pathname, int flags, mode_t mode);
    功能:如果文件存在就打开这个文件,不存在就创建并打开这个文件;
    参数:
        pathname:文件名(可以包含路径)
        flags:文件的打开方式
                O_RDONLY 只读
                O_WRONLY 只写
                O_RDWR      读写
                O_CREAT  创建
                O_TRUNC  清空
                O_APPEND 以追加的方式打开文件
        mode:存取权限
            用八进制表示用户权限,同组用户权限,其他用户权限,eg:0777,0766
      返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;

三、文件的关闭:

close
  文件描述符的个数是有限制的,文件使用完时应该对文件进行关闭操作;
   linux下文件描述符的个数为1024个(系统默认打开了0,1,2);
  #include <unistd.h>   (头文件)
  int close(int fd);
  参数:
      fd:文件描述符
     返回值:成功返回0, 失败返回-1并设置错误号;

四、文件的读写:

read
  函数原型:
  #include <unistd.h>   (头文件)

  ssize_t read(int fd, void *buf, size_t count);
    功能:向一个打开的文件读取内容;
    参数:
        fd: 文件描述符;
        buf: 用来存储读取数据的空间首地址
        count:预计要读取的字节数;
        返回值: 成功返回实际读到的字节数,读到文件末尾返回0, 失败返回-1并设置错误号;


write
  函数原型:
  #include <unistd.h>

  ssize_t write(int fd, const void *buf, size_t count);
    功能:向一个打开的文件写入内容;
    参数:
        fd: 文件描述符;
        buf: 用来存储待写入的数据的空间首地址
        count:预计要写入的字节数;
        返回值: 成功返回实际写入的字节数,失败返回-1,并设置错误号;

 五、目录流:

打开目录
   #include <sys/types.h>
   #include <dirent.h>
  DIR *opendir(const char *name);
    功能:打开一个目录;
     参数:目录名称
  返回值: 成功返回一个目录流指针,失败返回NULL;

读取目录
    #include <dirent.h>

    struct dirent *readdir(DIR *dirp);
  功能:读取目录里面的文件信息;
  参数:
      dirp:目录流
     返回值:成功返回下一个目录项, 失败或者读到目录的末尾返回NULL并设置错误号;
  
目录流的关闭
  #include <sys/types.h>
  #include <dirent.h>

  int closedir(DIR *dirp);
  返回值:成功返回0, 失败返回-1,并设置错误号;

六、修改文件权限:

int chmod(const char *pathname, mode_t mode);

参数:

   pathname:文件名(可包含路径)

  mode:修改后的权限
 int fchmod(int fd, mode_t mode);

    fd:文件描述符

    mode:修改后的权限

成功返回0, 失败返回-1并设置错误号;

七、格式输出:

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

功能:向一个流格式输出

参数:

       stream:输出流

       format:地址表

       sprintf():
    int sprintf(char *str, const char *format, ...);
    功能:格式输出到一个str指向的空间中;


sscanf();
    int sscanf(const char *str, const char *format, ...);   
   功能:以某种格式从str指向的空间读取内容

 类似资料: