kar*_*_ms 106 c file-descriptor file-pointer
我想知道文件描述符和文件指针之间的区别.
此外,在什么情况下你会使用一个而不是另一个?
unw*_*ind 136
文件描述符是一个低级整数"句柄",用于在Linux和其他类Unix系统中识别内核级别的已打开文件(或套接字等).
您将"裸"文件描述符传递给实际的Unix调用,例如read(),write()等等.
甲FILE指针是一个C标准库级构建体,用于表示一个文件.该FILE包装的文件描述符,并增加了缓冲等功能,使I/O更容易.
您将FILE指针传递给标准C函数,例如fread()和fwrite().
Ben*_*Ben 56
一个是buffered(FILE *)而另一个不是.实际上,FILE *当你从一个"真正的"文件(即驱动器)上读取时,你几乎总是想要使用,除非你知道自己在做什么,或者除非你的文件实际上是一个套接字.
您可以从FILE *使用中获取文件描述符,fileno()并且可以使用FILE *从文件描述符中打开缓冲区fdopen()
Mar*_*man 19
文件描述符只是从Posix open()调用中获得的整数.使用标准C,fopen()您将获得一个FILE结构.该FILE结构包含此文件描述符以及其他内容,例如文件结束和错误指示符,流位置等.
所以使用fopen()相比,使用给你一定的抽象open().一般来说,您应该使用,fopen()因为它更易于移植,您可以使用所有其他使用FILE结构,即fprintf()和系列的标准C函数.
使用或者没有性能问题.
Yog*_*H T 14
文件描述符与文件指针
文件描述符:
文件描述符是open()系统调用返回的整数值.
int fd = open (filePath, mode);
文件指针:
文件指针是指向fopen()库函数返回的C结构的指针,用于标识文件,包装文件描述符,缓冲功能以及I/O操作所需的所有其他功能.文件指针的类型为FILE,其定义可以在"/usr/include/stdio.h"中找到.此定义可能因编译器而异.
FILE *fp = fopen (filePath, mode);
// A FILE Structure returned by fopen
typedef struct
{
unsigned char *_ptr;
int _cnt;
unsigned char *_base;
unsigned char *_bufendp;
short _flag;
short _file;
int __stdioid;
char *__newbase;
#ifdef _THREAD_SAFE
void *_lock;
#else
long _unused[1];
#endif
#ifdef __64BIT__
long _unused1[4];
#endif /* __64BIT__ */
} FILE;
Run Code Online (Sandbox Code Playgroud)
Aks*_*til 12
想要添加可能有用的点数.
关于 FILE *
我多次使用它来调试日志.例,
FILE *fp;
fp = fopen("debug.txt","a");
fprintf(fp,"I have reached till this point");
fclose(fp);
Run Code Online (Sandbox Code Playgroud)关于 FILE DESCRIPTOR
它通常用于IPC.
对*nix系统上的文件(设备,文件,套接字等)提供低级别控制,因此比它更强大FILE *.