nt fflush(FILE *stream)
说明:强迫将缓冲区中的数据写回到参数stream指定的文件中。
返回值:成功返回0,失败返回EOF,错误代码存于errno中
解析:
fflush 函数调用后,是将数据流写入内核队列中,并没有将数据写入磁盘文件中。
所以,要数据立即写入磁盘中还需要调用fsync函数。
例如:省略部分,参考linux C函数详解
int main()
{
FILE *fp;
fp=fopen(“test.text”,”r+”);
if(fp==NULL)
return -1;
fputs……;
fflush…..;
fileno…..;//将数据流转换成文件描述符
fsync….;
fclose(fp);
}
文件指针/句柄(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; //这属于“曲线救国”
文件指针 到 文件描述符:FILE*--fileno()--->fd;
文件指针 到 文件路径:FILE* --- ??? ---PATH;// 这个的直接转换的方法还没有查到。请补充。
参考:https://www.cnblogs.com/mushui/p/3340546.html
http://blog.sina.com.cn/s/blog_a04184c101010kuo.html
http://www.ee156.com/24.html