Linux中基础IO部分--open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

int open(const char * pathname,int flages,mode_t mode)
pathname:带路径的文件名
mode:若有可能创建新文件则需要指定文件权限
flags:选项参数
必选项:O_RDONLY/O_WRONLY/O_RDWR 只读/只写/可读可写 --三种只能选择其一
可选项:
O_CREAT 文件不存在则创建新文件,存在则打开(使用这个必须用mode,加上权限)
O_EXCL 跟O_CREAT同事使用,若文件不存在则创建,存在则报错
O_TRUNC 打开文件的同时截断文件(清空文件原有内容)
O_APPEND 写入数据的时候总是追加在文件末尾
w+:O_RDWR | O_CREAT | O_TRUNC ☺
a+:O_RDWR | O_APPEND | O_CREAT
open返回值:文件的操作句柄—文件描述符(正整数)

ssize_t write(int fd,const void * buf,size_t count)
fd:文件描述符
buf:要写入文件的数据缓冲区首地址
count:要写入的数据长度
返回值:实际写入文件中的数据字节长度(不一定等于count),失败返回-1.

ssize_t read(int fd,void * buf,size_t count)
fd:文件描述符
buf:缓冲区首地址,放入取到的数据
count:要读取的数据长度,大小不能大于缓冲区大小
返回值:实际读取文件中的数据字节长度(不一定等于count),返回0表示读到文件末尾,失败返回-1.

 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <stdlib.h>
  4 #include <fcntl.h>
  5 
  6 int main()
  7 {
  8     int fd = open("./test.txt",O_RDWR | O_CREAT | O_TRUNC,0664);
  9     if(fd < 0)
 10     {
 11         perror("open error");
 12         return -1;
 13     }
 14     char  str[32] = "this is a real world!\n";
 15     int num = write(fd,str,15);
 16     if(num < 0)
 17     {
 18         perror("write error");
 19         return -1;
 20     }
 21     int ret = read(fd,str,10);
 22     if(ret < 0)
 23     {
 24         perror("read error");
 25         return -1;
 26     }
 27     close(fd);                                                                                                                                                                          
 28     return 0;
 29 }

int close(int fd) :关闭文件,释放资源.

fd与FILE:
fd:文件描述符,int类型的整数,就是struct files_struct中的指针数组struct file fd_array[]的某一个元素的下标,存放的是文件的描述信息,进程可以通过这个下标找到文件的描述信息,进而操作文件。
C程序通常使用不同的FILE结构体来管理每个文件,实际上FILE是间接的操作系统的文件控制块(FCB)来实现对文件的操作。
不论是Linux还是Windows,FILE
存放的都是open出的原始的fd与别的文件信息。**

发布了149 篇原创文章 · 获赞 27 · 访问量 5041

猜你喜欢

转载自blog.csdn.net/qq_44783220/article/details/103264270