首页 > 系统相关 >Unix/Linux系统编程学习笔记第九章

Unix/Linux系统编程学习笔记第九章

时间:2023-09-17 16:33:07浏览次数:32  
标签:fp 文件 int 编程 char Unix FILE Linux 库函数

《信息安全系统设计与实现》第二周学习笔记


第九章 I/O库函数

I/O库函数与系统调用

每个I/O库函数的根都在对应的系统调用函数中

  • 系统调用函数
    open()
    read()
    write()
    lseek()
    close()
  • I/O库函数
    fopen()
    fread()
    fwrite()
    fseek()
    fclose()

I/O库函数的算法

  • fread算法:
    (1)第一次调用fread()时候,FILE结构体的缓冲区是空的,fread()使用保存的文件描述符fd发出一个 n =read(fd, fbuffer, BLKSIZE);
    系统调用,用数据块填充内部的fbuf[]
    (2)在随后的每次fread()的调用中,它都尝试满足来自FILE结构体内部缓冲区的调用
  • fwrite算法:
    fwrite算法与fread算法类似,只是数据传输方向不同
  • fclose算法:
    若以写的方式打开文件,fclose会先关闭文件流的局部缓冲区。然后,它会发出一个close(fd)系统调用来关闭FILE结构体中的文件描述符。最后,它会释放FILE结构体,并将FILE指针重置为NULL

I/O库模式

  • fopen()
    fopen()中的模式参数可以指定为“r”,“w”,“a”,分别代表读,写,追加,具体含义如下:
    r:读
    w: 写
    a:追加
    r+:读/写,不会截断文件
    w+:读/写,会先截断文件;如果文件不存在,会创建文件
    a+:通过追加进行读/写;如果文件不存在,会创建文件

  • 字符模式I/O
    int fgetc(FILE *fp); // get achar from fp, cast to int(从指针fp获取achar,强制转换为整型)
    int ungetc(int c, FILE *fp); // push a prviously char got by fgetc() back to stream(将fgetc()获得的一个明显的字符推回到流中)
    int fputc(int c, FILE *fp); // put a char to fp(将字符放入指针fp)

  • 行模式I/O
    char *fgets(char *buf, int size, FILE *fp);(从fp中读取最多的为一行(以\n结尾)的字符)
    int fputs(char *buf,FILE *fp);(将buf的一行写入fp中)

  • 格式化I/O

格式化输入:(FMT=格式字符串)

   scanf(char *FMT,&items);  
   fscanf(fp, char *FMT,&items);  //from file stream  

格式化输出:

   printf(char *FMT,items);  //to stdout
   fprintf(fp,char *FMT,items);  //to file stream   
  • 内存中的转换函数
   sscanf(buf,FMT,&items);
   sprintf(buf, FMT, items);
  • 其他I/O库函数
    fseek()、ftell()、rewind():更该文件流中的读/写字节位置
    feof()、ferr()、fileno():测试文件流状态
    fdopen():用文件描述符打开文件流
    freopen():以新名称重新打开现有的流
    setbuf()、setvbuf():设置缓冲方案
    popen():创建管道,复刻子进程来调用sh

  • 限制混合fread-fwrite
    当某文件同时进行读、写操作时,会限制混合使用fread()和fwrite(),注意两者之间至少有一个fseek()或者ftell()

文件流缓冲

(1)无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输
(2)行缓冲:遇到换行符时,写入行缓冲流的字符以块的形式传输
(3)全缓冲:写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。这是文件流的正常缓冲方案。通过fopen()创建文件流之后,在执行任何操作之前,用户均可发出一个 setvbuf(FILE *stream,char *buf , int node,int size)

变参函数

在I/O库函数中 printf()相当独特,多种类型的可变数量参数都可以调用它


GPT苏格拉底挑战

  • I/O库函数的算法







  • 文件流缓冲









遇到的问题及解决方法

  • 问题:对于I/O库函数和系统调用函数的异同有疑惑,它们的功能相近,样子也差不多,那么它们有什么区别
  • GPT的回答:


实践(小写转大写)

  • 截图:



    代码:

标签:fp,文件,int,编程,char,Unix,FILE,Linux,库函数
From: https://www.cnblogs.com/fanchaoming/p/17709074.html

相关文章

  • linux环境下安装nginx步骤
    linux环境下安装nginx步骤开始前,请确认gccg++开发类库是否装好,默认已经安装。ububtu平台编译环境可以使用以下指令apt-getinstallbuild-essentialapt-getinstalllibtoolcentos平台编译环境使用如下指令安装make:yum-yinstallgccautomakeautoconf......
  • linux kill命令详解
    1.命令格式:kill[参数][进程号] 2.命令功能:发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用......
  • 第2章 细说Linux系统用户/组管理(1)
    第2章细说Linux系统用户/组管理(1) 分类: Linux基础篇undefined2.1用户和组的基本概念用户和组是操作系统中一种身份认证资源。每个用户都有用户名、用户的唯一编号uid(userid)、所属组及其默认的shell,可能还有密码、家目录、附属组、注释信息等。每个组也有自......
  • Linux系列教程(二)——Linux系统安装(手把手学安装centos6.8)
    目录1、安装VMware2、在VMware上安装CentOS第1步:打开VMware,点击创建新的虚拟机第2步:选择典型,点击下一步。出现如下界面,然后选择第三个选项:稍后安装操作系统,点击下一步第3步:客户机安装操作系统选择Linux,版本根据自己下载的Linux镜像文件来选择......
  • 记一次Linux服务器上查杀木马经历
    开篇前言    Linux服务器一直给我们的印象是安全、稳定、可靠,性能卓越。由于一来Linux本身的安全机制,Linux上的病毒、木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux的安全性有个误解:以为它永远不会感染病毒、木马;以为它没有安全漏洞。所以很多Linux服务器......
  • Linux 操作系统!开篇!!!
    此篇文章主要会带你介绍Linux操作系统,包括Linux本身、Linux如何使用、以及系统调用和Linux是如何工作的。Linux简介UNIX是一个交互式系统,用于同时处理多进程和多用户同时在线。为什么要说UNIX,那是因为Linux是由UNIX发展而来的,UNIX是由程序员设计,它的主要服务对......
  • Linux学习之CentOS(三十一)--Linux远程管理之SSH、VNC
    您可以通过点击右下角的按钮来对文章内容作出评价,也可以通过左下方的关注按钮来关注我的博客的最新动态。如果文章内容对您有帮助,不要忘记点击右下角的推荐按钮来支持一下哦如果您对文章内容有任何疑问,可以通过评论或发邮件的方式联系我:[email protected]......
  • Linux 搭建FTP服务器
    介绍本章主要介绍在Linux中搭建FTP服务器的过程,需要掌握的要点是配置文件的合理配置。  知识点在linux中使用的FTP是vsftpFTP可以有三种登入方式分别是:匿名登录方式:不需要用户密码本地用户登入:使用本地用户和密码登入虚拟用户方式:也是使用用户和密码登入,但是该用户......
  • CentOS、Ubuntu、Debian三个linux比较异同
    Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。而绝大多数VPS上只提供开源社区维护的发......
  • Linux静态库生成指南
    Linux上的静态库,其实是目标文件的归档文件。在Linux上创建静态库的步骤如下:写源文件,通过 gcc-cxxx.c 生成目标文件。用 ar 归档目标文件,生成静态库。配合静态库,写一个使用静态库中函数的头文件。使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。下面......