我是靠谱客的博主 沉默水蜜桃,最近开发中收集的这篇文章主要介绍linux下查看文件描述符,linux下文件描述符的查看及分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

起因

近期在调试一个Android播放内核是遇到上层传递的是fd(file descriptor),但是在文件播放结束之后调用lseek却提示返回-1,errno=29(#define ESPIPE 29 /* Illegal seek */)。

好吧。那就确定下原因。

在网上搜到有说lseek存在问题,“对于已经到达EOF的stream,使用lseek是不能让stream再次可读的”。具体参考Android NDK之fseek, lseek。随即写了个命令行程序,在android shell下验证了下,经过验证是可以的。那就继续找吧。

最终发现一个有趣的现象,Android的MediaServer传递的fd只能在调用时使用,之后就被复用了,指针都改变了。具体发现的方法就是本文描述的内容。

文件操作

文件操作比较通用的就是C库的FILE(带缓冲的文件流),也就是常用的fopen, fclose, fprintf, fscanf, fseek, fread, fwrite等函数。这里面比较核心的概念是FILE结构,这是C库提供的跨平台的文件操作函数,多数情况下是封装了系统内核提供的文件读写函数,比如在windows下是CreateFile, CloseFile, OpenFile, WriteFile, ReadFile等函数,在linux下是open, close, lseek, read, write等内核API。

在linux下内核API主要提供了基于文件描述(FD,file descriptor)的文件操作机制,注意FD默认是非负的,通常0-stdin、1-stdout、2-stderr。

先看看如何实现FILE到fd的转换,函数fileno可以实现这种转换,原型如下:

最后

以上就是沉默水蜜桃为你收集整理的linux下查看文件描述符,linux下文件描述符的查看及分析的全部内容,希望文章能够帮你解决linux下查看文件描述符,linux下文件描述符的查看及分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

相关文章

评论列表共有 0 条评论

立即
投稿
返回
顶部