美文网首页
Head First C学习之文件描述符、fileno()、du

Head First C学习之文件描述符、fileno()、du

作者: 燚随风 | 来源:发表于2016-04-06 16:49 被阅读45次

进程用文件描述符表示数据流

  • 文件描述符是一个数字,它代表一条数据流。
  • 进程会把文件描述符和对应的数据流保存在描述符表中。

描述符表:

名称 描述符号 数据流
标准输入 0 键盘
标准输出 1 屏幕
标准错误 2 屏幕
其他形式的数据流 3 数据库连接
  • 虽然叫文件描述符,但它不一定是连接硬盘上的某个文件,有可能是连接键盘屏幕文件指针网络
  • 描述符表的前三项万年不变
  • 其他项要么为空,要么连接进程打开的数据流。
    创建进程以后,标准输入连接到到键盘,标准输出标准错误连接到屏幕。它们保持这样的连接,知道有人把他们重定向到其他地方。

fileno()返回描述符号

每打开一个文件,操作系统都会在描述符表中新注册一项。

#include <stdio.h>
int fileno(FILE *stream);
FLIE * my_file = fopen("guitar.mp3","r");

操作系统会遍历描述符表寻找空项,把新文件注册在其中。

描述符号 数据流
3 数据库连接
4 guitar.mp3文件

利用fileno()函数获取它的描述符

int descriptor = fileno(my_file)

dup2()复制数据流

#include <unistd.h>  
int dup( int oldfd );
int dup2( int oldfd, int targetfd );  
dup(4,3);

3号描述符重新指向4,假设4号描述符中注册了guitar.mp3文件指针。虽然guitar.mp3只有一个,与它相连的数据流野只有一条,但数据流(FILE*)同时注册在文件描述符3和4中

描述符号 数据流
3 数据库连接 (guitar.mp3文件)
4 guitar.mp3文件

相关文章

  • Head First C学习之文件描述符、fileno()、du

    进程用文件描述符表示数据流 文件描述符是一个数字,它代表一条数据流。 进程会把文件描述符和对应的数据流保存在描述符...

  • 文件I/O和记录锁

    文件描述符: 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用。按照惯例:0(STDIN_FILENO...

  • Head First C 学习之K&R C 、ANSI

    @(C语言)[学习笔记, Head First C, C语言]起于Head First C 第2页 下, 书中简介...

  • centos维护

    找大文件du -hm --max-depth=2 | sort -nr | head -12 du -sh * c...

  • Bufffered I/O Others

    获取相关联的文件描述符fd 成功后,fileno()返回与流关联的文件描述符。如果失败,则返回−1。这只能在给定流...

  • Head First C学习之BLAB

    套接字 C程序有那个数据流读写字节,如文件,标准输入输出等,如果想写一个与网络通信的程序,就需要一种新的数据流-套...

  • Head First C 学习之Client

    和服务器用BLAB四部曲(bind()、linsten()、accept(),开始对话)不同,客户端只需要两步: ...

  • HTML+CSS

    (待续。。。) 1.Head First HTML与CSS(第2版) [Head First HTML and C...

  • [linux编程]文件I/O

    文件描述符 非负整数, 默认使用最小的可用的整数0,1,2 对应 STDIN_FILENO, STDOUT_FI...

  • Head First C学习之使用线程

    创建进程程的效率低, 进程共享数据不方便 进程的代码比较冗余 因此有时需要线程 如何创建线程 使用流行的线程库:P...

网友评论

      本文标题:Head First C学习之文件描述符、fileno()、du

      本文链接:https://www.haomeiwen.com/subject/wwlmlttx.html