文件描述符和文件指针的区别
文件描述符只是文件描述符表的索引。对于我们操作系统中的每个进程,都有一个进程控制块(PCB)。 PCB 跟踪过程的上下文。所以其中的一个字段是一个称为文件描述符表的数组。
该数组跟踪进程拥有和可以操作的所有资源。文件描述符表保存指向资源的指针。资源可能是
- 文件
- 终端输入/输出
- 管道
- 机器之间通信通道的套接字
- 任何设备
因此,如果任何进程打开或使用任何资源,文件描述符表中都会有一个条目。任何进程在首次启动时都可以访问三个资源。这些资源是:
- 标准输入
- 标准输出
- 标准错误
用一个例子来理解这一点。假设我们在终端上工作,然后输入是标准输入,输出是标准输出,错误是标准错误。如果我们打开任何其他终端,那么现在两者都是两个不同的进程。新打开的终端将有自己的标准输入、标准输出,因为它是一个不同的进程。
文件描述符只是您从open()系统调用中获得的整数。
文件描述符示例:
int fd = open(filePath, mode);
文件指针是fopen()库函数返回的指针。它用于标识文件。它被传递给fread()和fwrite()函数。
文件指针示例:
FILE *fp;
fp = fopen(“sample.txt,”a”);
fprintf( fp, “Welcome to GFG”);
fclose(fp);
文件指针提供了高效率和高可移植性。与文件描述符不同,它是缓冲的。通常,我们在读取文件时使用文件指针。
以下是文件描述符和文件指针之间的差异表 File Pointer File Descriptor 1. File pointer is allocated with fopen function call
FILE *fp;
fp = fopen(“sample.txt,”a”);File descriptor is allocated with open system call
int fd = open( filePath, mode );2. It is generally, use for the application which is doing extensive read
or write from a fileIt is generally used for the application that do frequently random access of file 3. It is a pointer It is an integer value like 0, 1, 2 4. The file pointer is buffered The file descriptor is not buffered 5. It is highly portable and efficient It is less portable and efficient in comparison with the file pointer 6. It is passed to fread() and fwrite() function It is passed to read() and write() function 7. It is not suitable for inter-process communication It is suitable for inter-process communication 8. Library functions generally use file pointer System call generally use the file descriptor