0

0

linux系统下fcntl函数解析与标准IO函数介绍

絕刀狂花

絕刀狂花

发布时间:2025-07-17 10:02:46

|

807人浏览过

|

来源于php中文网

原创

-----今天是最后一篇文章关于linux系统下文件io操作了,从明天起开始写文件属性的文章了,欢迎大家来学习,一起进步。(同时也欢迎大家批评指出错误,我会及时纠正过来的)。

一、fcntl函数解析:

1、函数原型:先用man手册来查看fcntl的用法和原型:

linux系统下fcntl函数解析与标准IO函数介绍

int fcntl(int fd, int cmd, ... /* arg */ )

参数解析:

fd:文件描述。

cmd:操作命令。

arg:供命令使用的参数(其实就是我们指定的那个文件描述符数字大小)

2、我们只以一个cmd参数为例--- F_DUPFD (Duplicate the file descriptor fd using the lowest-numbered available file descriptor greater than or equal to arg. This is different from dup2(2), which uses exactly the file descrip‐tor specified. On success, the new file descriptor is returned);这里主要是说F_DUPFD这个cmd的作用是复制文件描述符(作用类似于dup和dup2),这个命令的功能是从可用的fd数字列表中找一个比arg大或者和arg一样大的数字作为oldfd的一个复制的fd,和dup2有点像但是不同。下面是代码示例:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#define FILENAME        "a.txt"int main(void){    int fd1 = -1, fd2 = -1;    fd1 = open(FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0644);    if (fd1 < 0)    {            perror("open");            return -1;    }    printf("fd1 = %d.\n", fd1);    fd2 = fcntl(fd1, F_DUPFD, 5);    printf("fd2 = %d.\n", fd2);    close(fd1);    return -1; }</code>
linux系统下fcntl函数解析与标准IO函数介绍

注:fcntl函数的cmd操作命令还有好多,这里只是起一个抛砖引玉的作用,哈哈哈。

二、标准IO介绍:

Linux加PHP加MySQL案例教程
Linux加PHP加MySQL案例教程

通过大量实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术,详尽分析了近30个典型案例。 本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。 本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言扳、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播

下载

1、什么是标准IO,什么又是文件IO?

标准IO是C库函数;而文件IO是linux系统的API,API类似于一种接口,是由操作系统提供的(说实话,在这之前,我这个人比较犟,好少会调用api,非得自己写一个函数,这样有的时候累的半死还不一定能够写出来;而直接用官方给的api函数,可以提高开发效率,节省时间,人力,哈哈哈。)

2、库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。【所以C库函数具有可移植性而API不具有可移植性。性能上和易用性上看,C库函数一般要好一些。譬如IO,文件IO是不带缓存的,而标准IO是带缓存的,等到合适的时间,我们的操作系统才会把写在缓冲区里的内容真正搞到下一层去。因此标准IO比文件IO性能要更高(这里的下一层是指硬件层存储区域,而我们的标准IO函数是应用层方面,它先向系统缓冲区操作,然后等待系统里面的write等函数操作,才把数据弄到硬件层上去)。

3、常用标准IO函数介绍:

常见的标准IO库函数有:fopen、fclose、fwrite、fread、ffulsh(刷新标准库函数的缓存,直接写进操作系统的缓冲区中)、fseek(其实在写这个的话,我自己也对这些函数的用法是一脸的懵逼,还是用man手册去查看他们的用法,才稍微基本会用了,所以这里我举一个例子,也是其抛砖引玉的作用);这里以fopen、fclose、fwrite、fread为例:

linux系统下fcntl函数解析与标准IO函数介绍

这里只查看了fopen的使用,更多使用,大家可以用 man 3 + 标准IO函数查看来查看它们各自的具体用法,这里我就不一一介绍了,代码示例:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">#include <stdio.h>              // standard input output#include <stdlib.h>#include <string.h>#define FILENAME        "a.txt"int main(void){    FILE *fp = NULL;    size_t len = -1;    //int array[10] = {1, 2, 3, 4, 5};    char buf[100] = {0};    fp = fopen(FILENAME, "r+");//r+表示可读可写    if (NULL == fp)    {            perror("fopen");            exit(-1);    }    printf("fopen success. fp = %p.\n", fp);    // 在这里去读写文件    memset(buf, 0, sizeof(buf));//清除缓存区buf    len = fread(buf, 1, 10, fp);    // The function fread() reads nmemb items of data, each size bytes long, from the stream pointed to by stream, storing them at the location given by ptr.    printf("len = %ld.\n", len);    printf("buf is: [%s].\n", buf);    fclose(fp);    return 0;}</code>
linux系统下fcntl函数解析与标准IO函数介绍

下面是写操作的代码演示:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">#include <stdio.h>              // standard input output#include <stdlib.h>#include <string.h>#define FILENAME        "a.txt"int main(void){    FILE *fp = NULL;    size_t len = -1;    int array[10] = {3,5,6,6,9};    fp = fopen(FILENAME, "w+");    if (NULL == fp)    {            perror("fopen");            exit(-1);    }    printf("fopen success. fp = %p.\n", fp);    // 在这里去读写文件    len = fwrite(array, sizeof(int),   sizeof(array)/sizeof(array[0]), fp);// sizeof(array)/sizeof(array[0])中sizeo(array)表示总数组的大 小,sizeof(array[0])表示一个元素的大小,所以整个式子表示数组   的元素个数    //  The function fwrite() writes nmemb items of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr.    printf("len = %ld.\n", len);    fclose(fp);    return 0;}</code>
linux系统下fcntl函数解析与标准IO函数介绍

三、总结:

通过这一段时间的学习,自己已经掌握了基本的文件IO操作了,接下来还是要多多实践来提高自己。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
fclose函数的用法
fclose函数的用法

fclose是一个C语言和C++中的标准库函数,用于关闭一个已经打开的文件,是文件操作中非常重要的一个函数,用于将文件流与底层文件系统分离,释放相关的资源。更多关于fclose函数的相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

344

2023.11.30

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

970

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

605

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

294

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

212

2025.08.29

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1848

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

614

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2357

2025.12.29

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ASP 教程
ASP 教程

共34课时 | 5.7万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号