详解Linux下的文件标述符和文件指针

   Linux下的文件标述符和文件指针

文件标识符:

首先我们来了解一下文件标识符是什么东西?

文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象化概念。

在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表都有一个指

向已经打开文件的指针。

每个linux进程都应该有三个标准的文件描述符,对应三个标准流。

整数值 名称 (unistd.h)符号常量 (stdio.h)文件流
0 Standard input STDIN_FILENO stdin
1 Standard output STDOUT_FILENO stdout
2 Standard error STDERR_FILENO stderr

文件描述符在形式上是一个非负整数,实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程

序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围

绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统

与文件描述符相关的操作:

功能 操作
文件描述符生成 open()、socket()、pipe()等
与单一文件描述符相关的操作 read()、write()、send()、fchmod()等
与复数文件描述符相关的操作 select()、poll()等
与文件描述符表相关度的操作 close()、dup()等

文件指针:

文件指针是C语言当中我们所学习的东西,C语言当中用一个指针变量指向一个文件,这个指针就被称为文件指针。通过文件指针我们可以对所指的文件进行各种的操作。C语言当中使用的是文件指针而不是文件描述符做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包含一个缓冲区和一个文件描述符。

文件指针式C语言的通用的格式,所以相对来说,更加便于移植.

我们通常来获取文件指针:

FILE *fp = fopen("test.txt","r");

获取到指针以后,我们就可以获得指针当中文件描述符的信息。

文件描述符是唯一的,但是文件指针不是唯一的,文件指针指向的对象是唯一的。

文件标述符和文件指针的转换:

int fileno(FILE *stream);

FILE *fdopen(int fd,const char *mode);

fdopen第一个参数是一个打开的文件描述符,mode是表示打开方式的字符串,和fopen相同,比如说“w”或者“r”.

fileno函数,它返回和文件流对应的文件描述符,失败返回-1。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Linux备份及恢复及Linux文件权限详解

    Linux备份及恢复及Linux文件权限详解 概述 一个系统管理员菜鸟不小心输入"chmod -R 777 /"从而导致了巨大的悲剧,使得整个系统遭到了严重的破坏.在日常管理中,我们有许多工具可以用来备份文件权限,如cp.rsync.etckeeper等.如果你使用了这个备份工具,那么你的确不需要担心改变的文件权限问题. 但如果只是想暂时备份文件权限(而不是文件本身),例如:为了阻止一些目录的内容被覆盖暂时移除该目录下所有文件写的权限:或是正在排除文件权限问题的过程中需要对文件进行ch

  • Linux CentOS MySQL数据库安装配置教程

    安装mysql数据库的笔记,分享给大家 a)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm b)安装mysql源:yum localinstall mysql57-community-release-el7-8.noarch.rpm 若结尾出现complete!,则说明MySQL源安装完成 c)检测是否安装完成:yum repolist enabled | grep "mys

  • Linux中对MySQL优化实例详解

    Linux中对MySQL优化实例详解 vim /etc/my.cnf以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略. [mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking 避免MySQL的外部锁定,减少出错几率增强稳定性. skip-name-resolve 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析

  • Linux的wget命令详解

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

  • Linux 检测服务器是否连接着网络

    Linux 检测服务器是否连接着网络 摘要: 每隔5分钟检测一次服务器是否连接着网络,如果三次检测都没有网络?则自动关机! 主要使用场景: 由于自己有一台服务器放在偏远的老家,有可能会遇到停电导致断网的问题,并且停电后UPS使用时间也有限制, 因此设计此脚本为了解决停电的时候服务器突然断电引起的各种问题,当停电后网络也就不通了,此时需要自动关闭服务器. 当然,来电后需要手动启动服务器!!! #!/bin/bash # 检测服务器是否连接着网络,如果网络不通 则 3次后 关机 # crontab

  • 如何在windows桌面使用ftp上传文件到linux服务器

    首先在linux服务器上安装ftp [root@host2 test]#yum -y install ftp vsftpd [root@host2 test]#service vsftpd start [root@host2 test]#chkconfig vsftpd --list [root@host2 test]#/etc/init.d/iptables stop [root@host2 test]# ftp 192.168.0.142 Connected to 192.168.0.142

  • 详解Linux下的sudo及其配置文件/etc/sudoers的详细配置

    详解Linux下的sudo及其配置文件/etc/sudoers的详细配置 1.sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等.这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性.Sudo不是对shell的一个代替,它是面向每个命令的. 它的特性主要有这样几点: § sudo能够限制用户只在某台主机上运行某些命令. § sudo提供了丰富的日志,详细地记录了每个用

  • Linux学习第三篇 Centos7安装mysql5.7.16数据库

    前言:在linux下安装mysql不如windows下面那么简单,但是也不是很难.本文向大家讲解了如何在Centos7下如何安装mysql5.7版本,如果有什么问题和错误的地方,欢迎大家指出. 版本:mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar 注释:在安装前需要确定现在这个系统有没有mysql,如果有那么必须卸载(在centos7自带的是mariaDb数据库,所以第一步是卸载数据库) 查看mysql数据库: rpm -qa | grep -i mysql 卸

  • 详解Linux下的文件标述符和文件指针

       Linux下的文件标述符和文件指针 文件标识符: 首先我们来了解一下文件标识符是什么东西? 文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象化概念. 在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表都有一个指 向已经打开文件的指针. 每个linux进程都应该有三个标准的文件描述符,对应三个标准流. 整数值 名称 (unistd.h)符号常量 (stdio.h)文件流 0 Standard input ST

  • 详解Linux下find查找文件命令和grep查找文件命令

    目录 一.find命令 1.按文件名 2.按文件类型查询 3.按照文件大小查找 4.按照文件日期查找 4.1按照创建日期查找 4.2按照修改日期查找 4.3按照访问日期查找 5.按深度查找 5.1查找起始点以下n层的目录,不超过n层 5.2搜距离起始点n层以下的目录(即最少n层) 6.高级查找 6.1-exec 6.2-ok 6.3管道方式 二.grep命令 三.grep和find命令结合使用 linux中一切皆文件的思想是重中之重,那么查找文件是学习Linux必须要掌握的技能. 一.find命

  • 详解Linux 下开发微信小程序安装开发工具

    详解Linux 下开发微信小程序安装开发工具 1. git clone https://github.com/yuan1994/wechat_web_devtools 然后创建一个文件夹 mkdir /opt/tencent/ 移动文件 mv ./wechat_web_devtools /opt/tencent 修改用户组 chown -R root:root /opt/tencent/wechat_web_devtools 启动测试工具 /opt/tencent/wechat_web_devt

  • 详解linux下利用crontab创建定时任务

    Linux下可以利用crontab创建定时任务. 常用搭配 crontab -e 编辑任务 crontab -l 查看所有任务[该用户] crontab -r 取消所有任务[该用户] 任务格式 × × × × × +命令(具体任务) 前5个参数表示时间,依次为: 参数 范围 分钟 0-59 小时 0-23 日期 1-31 月份 1-12 星期 0-6(0代表星期日) 特殊符号 为了精确表示定时,需要一些特殊符号来描述具体的任务执行时间.有以下几个符号: "/" 代表每,每隔多长时间 &

  • 详解Linux下调试器GDB的基本使用方法

    一.概述 GDB调试的三种方式: 1. 目标板直接使用GDB进行调试. 2. 目标板使用gdbserver,主机使用xxx-linux-gdb作为客户端. 3. 目标板使用ulimit -c unlimited,生成core文件:然后主机使用xxx-linux-gdb ./test ./core. 二.gdb调试 构造测试程序如下main.c和sum.c如下: main.c:#include <stdio.h> #include <stdlib.h> extern int sum(

  • 详解Linux下读取位图的注意事项

    详解Linux下读取位图的注意事项 在Linux下读取位图遇到的问题,很好地体现了linux与Windows操作系统的不同.按理说位图格式与操作系统无关,读取也应该无关,实际上在位图读到内存中时已经不同.下面主要介绍自己在Linux下操作位图遇到的问题. (一).位图结构 位图一开始是两个结构体,包括位图的详细信息,是读取后面数据的关键.所以读取位图首先要正确读取这两个结构体:BITMAPFILEHEADER和BITMAPINFOHEADER.其具体定义为: typedef struct tag

  • 详解linux下tar压缩解压缩文件夹的命令与参数

    前言 tar在linux上是常用的打包.压缩.加压缩工具,他的参数很多,这篇文章仅仅列举常用的压缩与解压缩参数,下面直接先上三个常用命令,一起来看看吧 1.压缩当前目录下文件夹/文件test到test.tar.gz: tar -zcvf test.tar.gz test 2.解压缩当前目录下的file.tar.gz到file: tar -zxvf file.tar.gz 参数详解 五个命令中必选一个 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原

  • 详解Linux下Tomcat开启查看GC信息

    一.开启GC日志 1.在Tomcat 的安装路径下,找到bin/catalina.sh 加上下面的配置,具体参数,自己配置: [root@centos7 tomcat]# vim bin/catalina.sh 复制代码 代码如下: JAVA_OPTS='-Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepG

  • 详解linux下tree命令的用法

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 : yum -y install tree -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容. -D 列出文件或目录的更改时间. -f 在每个文件或目录之前,显示完整的相对路径名称. -F 在执行文件,目录,Socket,

随机推荐