linux---基础IO

2023-05-16

在标准库中我们学习了printf,fprintf,sprintf,snprintf等等相关的函数,接下来是我们的系统I/O调用接口
open

       #includ e <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode)

此时我们打开一个文件就需要使用open函数,需要包含sys/types.h和sys/stat.h和fcntl.h三个头文件。
参数:

  • pathname:文件名字

  • flags:这里我们把它叫做参数选项

      O_RDONLY:以只读的方式打开
      O_WRONLY:以只写的方式打开
      O_RDWR:以读写的方式打开
      O_CREAT:如果文件不存在就创建一个新的文件
      O_APPEND:向文件末尾追加内容
      O_TRUNC:截断文件,(清空原有的数据)
      ...
    
  • mode:设置文件权限

返回值:

  • 成功:返回0
  • 失败:返回-1

write

       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

参数列表:

  • fd:open函数打开时返回的文件描述符
  • buf:缓冲区的名字
  • count:缓冲区中字节数的大小(一般使用strlen()计算)

返回值:

  • 成功:返回所写入的字节数(若为零则表示没有写入数据).
  • 错误:时返回-1,并置errno为相应值.
  • 若count为零,对于普通文件无任何影响,但对特殊文件 将产生不可预料的后果
    我们在后面再讨论出现0的情况

read

       #include <unistd.h>

       ssize_t read(int fd, void *buf, size_t count);

read()从文件描述符fd中读取count字节数据并放入从buf开始的缓冲区中,如果count为0,read()返回0,不执行其他任何操作,如果count大于SIZE_MAX,那么结果将不可预料
参数:

  • fd:文件描述符
  • buf:缓冲区名字
  • count:读取的字节数,一般使用缓冲区的大小。

返回值:

  • 成功时返回读取到的字节数(为0表示读到文件描述符)此返回值守文件剩余字节数限制,当返回值小于制定的字节数时并不意味这错误,这可能是因为当前可读取的字节数小于指定的字节数(比如已经接近文件末尾,或者正在从管道或者中断读取数据,或者read()被信号中断)
  • 失败返回-1,并使errno为相应值,在这种情况下无法得知文件偏移位置是否有变化。

lseek

       #include <sys/types.h>
       #include <unistd.h>
       off_t lseek(int fd, off_t offset, int whence);

参数列表:

  • fd:文件描述符

  • offset:偏移量

  • whence:偏移位置

       SEEK_SET:文件的开始位置
       SEEK_CUR:当前光标的位置
       SEEK_END:文件结束的位置
    

返回值:

  • 成功返回文件开始到最后光标位置的字节数的大小
  • 失败返回-1,并设置errno的值

lseek可以用来计算我们文件的大小

例子:

  1 #include <stdio.h>                                                          
  2 #include <sys/types.h>
  3 #include <sys/stat.h>
  4 #include <fcntl.h>
  5 #include <unistd.h>
  6 #include <string.h>
  1 #include <stdio.h>
  2 #include <sys/types.h>
  3 #include <sys/stat.h>
  4 #include <fcntl.h>
  5 #include <unistd.h>
  6 #include <string.h>
  7 int main(){
  8 
  9     int fd = open("te.txt",O_RDWR|O_CREAT,664);
 10     if(fd == -1){
 11         perror("open error\n");
 12     }
 13     char buf[1024];
 14     char str[] = "你好啊同学!!!";
 15     int ret = write(fd,str,sizeof(str));
 16     if(ret == -1){
 17         perror("write error");
 18     }
 19     ret = read(fd,buf,sizeof(buf));
 20     if(ret == -1){
 21         perror("read error");
 22     }
 23     printf("读取到的内容%s",buf);
 24     ret = lseek(fd,0,SEEK_END);
 25     if(ret == -1){
 26         perror("lseek erro");
 27     }
 28     printf("文件大小%d",ret);
 29     return 0;
 30 } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux---基础IO 的相关文章

  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 路由是否会影响具有绑定源地址的套接字?

    假设我有两个网络接口 eth0有地址10 0 0 1 eth1有地址192 168 0 1 Using route or ip route add我已将其设置为路由 所有地址至eth0 1 2 3 4只为了eth1 所以数据包到1 2 3
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 将 bash 脚本作为守护进程运行

    我有一个脚本 它每 X 次运行我的 PHP 脚本 bin bash while true do usr bin php f my script php echo Waiting sleep 3 done 我怎样才能将它作为守护进程启动 要从
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 我如何知道用户在使用 ncurses (Linux) 的控制台中按下了 ESC 键?

    I have a problem in detecting whether I just got a plain ESC key just code 27 or whether it was another special key such
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • /usr/bin/as:无法识别的选项“-EL”

    因此 在为我的1plus手机编译android内核时 经过3天的多次尝试 我放弃了并尝试在这里询问是否有人以前遇到过这个问题 这个错误对我来说有点模糊 但我觉得问题来自于我最近对 GNU Linux 发行版 Gentoo 的更改 它在不应该
  • 有没有办法改变vim的默认模式

    有谁知道如何更改vim的默认模式 它的默认模式是命令模式 但是我可以将其更改为插入模式吗 只需将以下行添加到您的 vimrc 中 start Vim s default mode will be changed to Insert mode
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • 使用 xargs 时如何获取退出代码(并行)

    我制作了一个用于启动并行 rsync 进程的脚本 bin bash LIST 1 DEST DIR 2 RSYNC OPTS 3 echo rsyncing From SRC DIR To DEST DIR RSYNC OPTS RSYNC
  • 我可以告诉 Linux 不要交换特定进程的内存吗?

    有没有办法告诉 Linux 它不应该将特定进程的内存交换到磁盘 它是一个 Java 应用程序 所以理想情况下我希望有一种方法可以从命令行执行此操作 我知道您可以将全局交换性设置为 0 但这明智吗 您可以通过以下方式执行此操作姆洛克尔 2 h

随机推荐

  • linux--进程控制2

    在进程控制的章节我们讲解了我们的进程创建 xff0c 这章节对进程控制进行补充 xff0c 进程终止 在我们创建一个进程之后我们避免不了我们去终止我们的进程 终止场景 正常退出 xff0c 结果符合我们的预期正常退出 xff0c 结果不符合
  • VINS-Mono论文学习与代码解读——目录与参考

    前言 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU融合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09 为更好地进行学
  • VINS-Mono代码解读——视觉跟踪 feature_trackers

    前言 本文主要介绍VINS的视觉处理前端的视觉跟踪模块 xff08 feature trackers xff09 论文第四章A节 xff08 IV MEASUREMENT PREPROCESSING A Vision Processing
  • 视觉SLAM中的数学——解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

    前言 本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识 xff0c 重点是如何采用矩阵分解的方法 xff0c 求解线性方程组AX 61 B 主要参考了 计算机视觉 算法与应用 附录A以及Eigen库的方法 本博客可能不会对分解
  • pycharm 每次打开文件都要配置解释器的解决方案

    今天在打开pycharm的时候 xff0c 又发现那个解释器不能用了 xff0c 然后在网上找解决方案 xff0c 有的说是用defautsetting解决 xff0c 然是我没有找到那个default setting 在哪里 233333
  • PS多边形套锁工具在框选区的时候一按shift键PS

    微软输入法更新导致的BUG xff0c 把微软拼音输入法设置中兼容性里使用旧版就解决了 步骤 xff1a 右键输入法 xff0c 选择设置 xff0c 选择常规 xff0c 然后拖到最下面 xff0c 勾上兼容性就可以 xff0c 如下图
  • N卡怎么修改录屏文件保存位置

    N卡的视频录制非常好用 xff0c 但是有时候找不到保存位置在哪里 xff0c 这里转载下文章记录下 xff0c 方便后续查看 首先告诉你默认位置 我的电脑下的 34 视频 34 文件夹 xff08 有的电脑里叫video xff09 如果
  • 常见的设计模式

    目录 工厂模式单例模式观察者模式策略模式代理模式装饰模式 工厂模式 这个模式有三个对象 xff1a 工厂 用户 产品 xff1b 这么说可能还有点抽象 xff0c 说具体点 xff0c 就是当我们在代码中需要生成一个类实例时 xff0c 不
  • C# 的静态构造函数和BeforeFieldInit含义

    1 静态初始化函数 xff1a 静态初始化函数 xff0c C 语法可以保证在一个程序中只调用一次 xff0c 但是会去掉默认的beforefieldinit 标记 xff08 C 默认会加 xff09 xff0c 会导致加载时机的变化 x
  • Unity万向锁

    结论 xff1a 当第二轴旋转 90 时会产生万向锁 xff0c 万向锁只发生在程序中 xff0c 现实世界不会发生 发生万向锁的底层原因是由于程序中会指定旋转顺序 xff0c 且前后顺序为父子包含关系 旋转顺序 xff1a 因为同样一组数
  • python脚本与shell脚本的相互调用

    python脚本与shell脚本的相互调用 python脚本调用shell脚本 xff1a 存在的shell脚本 xff08 test sh sh xff09 xff1a span class token comment bin csh s
  • 自动实现一个minishell更新(增加重定向功能)

    增加重定向功能 1 include lt stdio h gt 2 include lt unistd h gt 3 include lt stdlib h gt 4 include lt string h gt 5 include lt
  • linux sh 运行csh类型脚本报错

    初入linux xff0c 脚本用的是csh版本 xff0c 在尝试的过程中 xff0c 突然发现按照csh的语法写的指令 xff0c 运行不了 xff0c 例如 1 sh xff1a span class token function s
  • QT creator导入现有工程

    QT creator导入现有工程 如果从gitlib或者其他代码库下载了一些源文件 xff0c 用QT creator打开步骤如下 xff1a 点击 菜单栏的 File gt New File or Project点击 Import Pro
  • 腾讯测试开发面试题

    唉 xff0c 今天面试腾讯的测试开发工程师 xff0c 脸被打肿了 xff0c 下来查阅资料 xff0c 把一道面试题讲一讲吧 xff0c 题目是 xff1a O N 求一个数字串能整除3的连续子串的个数 xff0c 前缀和数组 43 对
  • bat命令调用rar进行文件夹压缩

    64 echo off set 34 ymd 61 date 0 4 date 5 2 date 8 2 date 11 2 date 14 2 34 rem ymd 就是当前的时间 例如20181022 34 C Program File
  • vbs执行相应的bat文件

    set ws 61 createobject 34 wscript shell 34 rem 新建一个脚本对象 do rem do loop 执行循环 ws run 34 C Users Administrator Desktop rar
  • 思岚科技RPlidar A3激光雷达ROS源码详解

    思岚科技RPlidar A3激光雷达ROS源码详解 使用 RPLIDARD 的 SDK 其实重点在于看懂client cpp和node cpp两个sample代码 xff0c 因此在这里我们讲从这里入手学习 RPLIDAR A3 的SDK
  • gcc和makefile用法总结(建议收藏)

    文章目录 64 toc 1 用GCC制作静态链接库静态链接库的创建静态链接库的使用 2 用GCC制作动态链接库动态链接库的创建动态链接库的使用 3 GCC找不到库文件怎么办 xff1f GCC生成可执行文件时找不到库文件GCC运行可执行文件
  • linux---基础IO

    在标准库中我们学习了printf xff0c fprintf xff0c sprintf xff0c snprintf等等相关的函数 xff0c 接下来是我们的系统I O调用接口 open includ e lt sys types h g