open与fopen 文件描述符与文件指针

参考:https://blog.csdn.net/mm_hh/article/details/71374474?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3

简要总结:fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。

open与fopen 文件描述符与文件指针_第1张图片

文件描述符的操作(如: open):
返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 即为文件描述符数组的下标,例如:a[i]中的i。
所有打开的文件都将通过此表中的文件描述符来引用;

而流(如: fopen):
返回的是一个FILE结构指针,即a[i]。FILE结构是包含有文件描述符的,FILE结构函数可以看作是对fd直接操作的系统调用的封装, 它的优点是带有I/O缓存

open函数
  作用:打开和创建文件。
  简述:
  
   int open(const char pathname, int oflag, … / mode_t mode */);
  
  返回值:成功则返回文件描述符,否则返回 -1
  对于 open 函数来说,第三个参数(…)仅当创建新文件时(即使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。
  O_RDONLY 只读模式
  O_WRONLY 只写模式
  O_RDWR 读写模式

0((标准输入)stdin),1((标准输出)stdout),2((标准错误输)stderr));

write是向 文件描述符(int)写

fopen:
函数原型:FILE * fopen(const char * path,const char * mode);

相关函数:open,fclose,fopen_s,_wfopen
所需库:

返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

参数path;字符串包含欲打开的文件路径及文件名,
参数mode:字符串则代表着流形态。
fopen函数相关情况

你可能感兴趣的:(c++)