linux c 文件指针 句柄(FILE*) 文件描述符(fd) 文件路径(filepath) 互相转换

最近在linux下编程常需要对一些文件进行操作。有时不同的条件下,需要将文件指针/句柄(FILE*)、文件描述符(fd)以及文件路径(filepath)进行相互转换,以满足实际的编程需要。

现简单的做一下整理。如下。

1:文件路径 文件描述符应是唯一的。文件指针(值)不是唯一的,但指向的对象也应该是唯一的。

2: FILE*中包含fd的信息,而且还包含IO缓冲,所以可以理解为FILE*是对fd的封装,是C的标准形式,所以FILE*比fd更适合跨平台,应多用fopen,少用 open。

3:转换

文件路径 到 文件指针:filepath --fopen()-->FILE*;

文件路径 到 文件描述符:filepath--open()--fd;

文件描述符 到 文件指针:fd--fdopen()-->FILE*;

文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath;

详细参考 《linux c 文件描述符 得到 文件名》 https://blog.csdn.net/whatday/article/details/114916142

文件指针 到 文件描述符:FILE*--fileno()--->fd;

详细参考 《linux c fopen open 互相转换 文件指针 到 文件描述符 FILE* 转 FD》https://blog.csdn.net/whatday/article/details/114916313

猜你喜欢

转载自blog.csdn.net/whatday/article/details/114916236