Linux编程基础之文本文件末尾自动加换行

2023-11-04

前言

操作系统:Fedora
文本文件末尾会自动加换行,利用

off_t oldpos=lseek(fd,0,SEEK_END);

指针定位会到最后一个字符(都是换行符)后面一位,相当于什么都没指到。

hello.txt 文件内容

hello.txt 文件内容如下(全文加上每一行的换行符共42个字符)
文件结尾(u后面)我并没有加换行符,但是读取文件时认为文件结尾有一个换行符
最后一个字母 u 是第41个字符
在这里插入图片描述

证明

代码

#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
        char ch;
        int fd=open("hello.txt",O_RDONLY);
        off_t oldpos=lseek(fd,0,SEEK_END);//指针定位到最后一个字符(都是换行符)后面一位
        int s=0,end=oldpos;
        printf("%d\n",oldpos);
        ssize_t numread=read(fd,&ch,1);//读取成功后,指针会自动往下走一个
        printf("%c",ch);
        oldpos=lseek(fd,0,SEEK_CUR);//获取指针当前位置时的oldpos
        printf("%d\n",oldpos);
        close(fd);
        return 0;
}

执行结果
在这里插入图片描述
第一次指针定位到文件最后一个字符(换行符)的后面一个位置,oldpos = 42,即指针的前一个位置
(oldpos是从0开始的索引)
读取字符失败,指针不动,再次获取指针当前位置,oldpos不变

将第一次调用的 sleek 参数修改
off_t oldpos=lseek(fd,0,SEEK_END);改为

off_t oldpos=lseek(fd,-1,SEEK_END);//指针指向文件的倒数第一个字符(换行符)

执行结果
在这里插入图片描述
第一次指针定位到文件最后一个字符(换行符),oldpos = 41,即指针的前一个位置
读取字符成功,指针往下一位,输出读取的换行符
再次获取指针当前位置,oldpos加一,输出42

将第一次调用的 sleek 参数再次修改,改为

off_t oldpos=lseek(fd,-2,SEEK_END);//指针指向文件的倒数第二个字符(u)

执行结果
在这里插入图片描述
第一次指针定位到文件倒数第二个字符(u),oldpos = 40,即指针的前一个位置
读取字符成功,指针往下一位,输出读取的字符u
再次获取指针当前位置,oldpos加一,输出41

总结

(1)文本文件末尾会自动加换行,
(2)利用

off_t oldpos=lseek(fd,0,SEEK_END);

指针定位会到最后一个字符(都是换行符)后面一位,指向空

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux编程基础之文本文件末尾自动加换行 的相关文章

  • UNIX/Linux IPC:从管道读取。运行时如何知道数据长度?

    我有一个子进程 它生成一些可变长度的输出 然后使用半双工管道将其发送到父进程 在父级中 如何使用 read 函数 由于每次数据的长度可能不同 我如何在运行时知道数据的大小以对缓冲区执行任何 malloc 操作 fstat 函数可以用于管道文
  • 在 Linux 上使用命令行 PHP 检查互联网连接

    我在 Linux 上使用命令行 PHP 来打开蓝牙拨号连接 并且我需要一种快速的方法来检查互联网连接是否处于活动状态 嗯 不一定要脏 但要快 使用exec运行外部命令不是问题 我正在考虑 ping 一些稳定的服务器 例如谷歌 但我想知道是否
  • 如何在ubuntu下使用nasm(汇编)从键盘读取单个字符输入?

    我在ubuntu下使用nasm 顺便说一句 我需要从用户的键盘获取单个输入字符 就像当程序询问您 y n 时 因此当按下按键并且不按 Enter 键时 我需要读取输入的字符 我用谷歌搜索了很多 但我发现的所有内容都与这条线有关 int 21
  • 监控(嗅探)由 FTDI USB 串行转换器创建的 /dev/ttyUSB0

    我想监视 嗅探 由 FTDI USB 串行转换器创建的 dev ttyUSB0 的流量 我已经在 Windows 中编写了自己的应用程序 现在我尝试将其移植到 Linux 并使用 dev tty USB0 我想调试实际发生的通信 软件 st
  • 如何从存储在 char* 指针中的 name 调用 c 函数?

    我想通过函数的名称动态调用函数 例如 假设有以下函数和字符串 void do fork printf Fork called n char pFunc do fork 现在我需要打电话do fork 就在 pFunc 那么这可能吗 欢迎 C
  • 如何在 Flutter 中创建类似 Telegram 或 WhatsApp 聊天页面的富文本输入?

    How can I create a Rich Text Input like a Telegram chat page without displaying reserved characters such as bold italic
  • “原子”系统调用是什么意思?

    我知道atomic通常在以下上 下文中使用竞争条件意思是类似一致性 and 根据多线程 多处理环境确定结果 没关系 但最近我读到了Linux中的原子系统调用 但不明白什么是atomic实际上这里的意思是 即how this 原子性 is 实
  • 如何从子进程为父进程设置环境变量?

    如何从子进程为父进程设置环境变量 例如 我有父进程和子进程 子进程继承自父进程环境变量 TMP VARIABLE 777 如何将子进程中 TMP VARIABLE 的值更改为 999 使其值对父进程可见 因为 TMP VARIABLE 99
  • 错误:‘:’标记之前需要初始化程序

    我正在尝试编译一些 C 代码 可以在 Windows 上使用 Visual Studio 2012 进行编译 g 4 4 我有这段代码 const std string cnw restoreSession const std vector
  • 如何使用Python distutils?

    我用 python 编写了一个快速程序 将 gtk GUI 添加到 cli 程序中 我想知道如何使用 distutils 创建安装程序 因为它只是命令行应用程序的 GUI 前端 所以它只能在 nix 中工作 所以我不担心它是跨平台的 我的主
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • 我应该如何从非 root Debian Linux 守护进程登录?

    我正在编写一个新的守护进程 它将托管在 Debian Linux 上 我发现 var log 具有仅 root 写入权限 因此我的守护进程无法在那里写入日志文件 但是 如果它写入那里 它似乎将获得自动日志轮转 并且也按照用户期望的方式工作
  • 如何在每个 xargs 命令之间休眠 1 秒?

    例如 如果我执行 ps aux awk print 1 xargs I echo 我想让 shell 在每次之间休眠 1 秒echo 如何更改我的 shell 命令 您可以使用以下语法 ps aux awk print 1 xargs I
  • SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

    我在用SDL http www libsdl org 用于在 Linux 上运行的 OpenGL 应用程序 我的问题是 SDL 正在捕获 SIGINT 并忽略它 这是一个痛苦 因为我正在通过屏幕会话进行开发 并且我无法使用 CTRL C 终
  • top命令的CPU使用率计算

    我正在尝试使用 GNU coreutil top 的公式来计算 CPU 使用率的百分比 但 top 正在使用一些 half total 来计算百分比 即在百分比上添加 0 5 在top的utils c中 以下行 在 3 8 beta1 中
  • 在Linux服务器中安装ZLIB

    我要安装ZLIB http www techsww com tutorials libraries zlib installation installing zlib on ubuntu linux php在Linux服务器中 我的服务器帐
  • UNIX 域 STREAM 和 DATAGRAM 套接字之间的区别?

    这个问题是NOTSTREAM 类型和 DATAGRAM 类型 INTERNET 套接字之间的区别 我知道 STREAM 套接字使用 TCP 数据报套接字使用 UDP 以及所有 TCP UDP 内容 按顺序到达的数据包 ACK NACK 等
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 在Linux上如何找到当前目录的所有直接子目录?

    在Linux上如何找到当前目录的所有直接子目录 最简单的方法是通过编写来利用 shell 通配功能echo 如果你喜欢使用ls 例如要应用格式 排序选项 请使其ls d 解释 斜杠确保仅考虑目录 而不考虑文件 Option d 列出目录本身
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上

随机推荐

  • kubelet启动失败

    原因之一 是kubelet cgroup驱动程序 cgroupfs 与docker cgroup驱动程序不同 公司的k8s 新增了一个节点 但kubelet启动一直报错 无法启动 网上找了半天 发现是kubelet cgroup驱动程序 c
  • 机器学习之逻辑回归模型

    1 逻辑回归模型介绍 逻辑回归 Logistic Regression LR 又称为逻辑回归分析 是一种机器学习算法 属于分类和预测算法中的一种 主要用于解决二分类问题 逻辑回归通过历史数据的表现对未来结果发生的概率进行预测 例如 我们可以
  • openglStudySite

    http www learnopengles com android lesson one getting started
  • Python正则表达式_常用匹配方法findall

    正则匹配方法之findall 核心要点 findall 是将所有匹配到的字符 以列表的形式返回 如果未匹配 则返回空列表 一 pattern findall 方法 语法 findall string None pos 0 endpos 92
  • qt undefined reference to的原因之一

    在h文件定义的函数 参数带const 而在cpp文件中实现函数时 参数没有带const 则编译时所有调用该函数的地方会报undefined reference to错误 两者修改一致就好了 如 h文件定义的函数 void Test cons
  • 有意思的C编程题目

    有意思的C编程题目 有意思的编程 1 翻扑克 有52张朴克牌 使它们全部正面朝上 从第2张牌开始 把凡是2的倍数位置上的牌翻成正面朝下 接着从第3张牌开始 把凡是3的倍数位置上的牌正面朝上的翻成正面朝下 正面朝下的翻成正面朝上 接着从第4张
  • 工具链接记录

    工具链接记录 内网穿透 https gofrp org docs examples https2http
  • C/C++声明类型typedef

    typedef为现有类型定义易于记忆的类型名 即同义字 别名 它与传统C语言中 define很相似 下面我们就从实例中体会它的用处 1 常规变量类型定义 例如无符号整型标识符太长 为了自己后续方便 我希望起个自己认识又短小精简的名字 如下
  • Extremal Region(极值区域)文本定位与识别法-学习笔记(一)

    最近做一个计算机视觉的项目 要将其中复杂场景中的文本识别率从92 进一步提升 挑战很大也很有意思 边阅读一些最新的文本定位与识别的论文 边在这里记下阅读笔记与翻译内容 慢慢研究 本人英语与专业水平有限 仅供学习参考 欢迎交流 请多指教 Re
  • 网络基础:子网掩码划分2

    例子 例1 192 168 1 88 26传统方法 192 168 1 88 26 192 168 1 88 255 255 255 192 注意 26 255 255 255 11000000 255 255 255 192 传统方法 1
  • python:打包package

    简介 把模块打包成package 可以进行分发和安装 packaged的打包和安装 一 package层次架构 二 package的打包和安装 1 创建setup py 2 打包package 3 安装package 一 package层次
  • 设计模式--命令模式

    命令模式 属于行为型模式基本原理 请求以命令的形式包裹在对象中 并传给调用对象 调用对象寻找可以处理该命令的合适的对象 并把该命令传给相应的对象 该对象执行命令 主要流程 1 创建命令对象 该对象中包含请求 和执行请求 2 创建请求类 其中
  • 我问chatGPT,在JavaScript中构造函数和类的区别

    问 构造器函数和面向中的类是同样的东西吗 答 构造器函数和面向对象中的类并不是同样的东西 它们之间有些许不同 在面向对象编程中 类是一种抽象的概念 它描述了一类具有相同属性和行为的对象 类可以看作是对象的蓝图 包含了对象的属性和方法 而对象
  • 如何进行弱网测试?专项测试中最实用的方法了解一下……

    目录 引言 一 什么是弱网测试 二 为何要进行弱网测试 三 如何做弱网测试 四 弱网测试工具 引言 如今这个高度互联的时代里 网络环境对于应用程序的影响越来越重要 而弱网测试就是用来检验应用程序在恶劣网络环境下的表现 如果你是一名开发人员或
  • 【linux shell】服务器系统自动化巡检脚本资源状况统计

    运维服务器系统的时候需要定期检查服务器系统资源状况 如CPU 内存 硬盘这些资源消耗信息统计 在这种情况下也可以用开源的监控系统导出相应的需求信息或者直观的通过监控平台去查看资源状况 本文将介绍另一种方式通过Linux shell脚本实现服
  • 0xA00F4244<NoCamerasAttached>相机打不开解决办法

    0xA00F4244 NoCamerasAttached 依次排查 ctrl s 搜索 设备管理器 打开找到 照相机 如图1 如果为灰色 说明设置里头相机权限没有打开 可以去设置打开如图2 也可以fn f10 打开之后 返回 设备管理器 窗
  • 基于fasttext的新客服文本分类

    基于fasttext的新客服文本分类效果评估 具体步骤如下 数据处理 模型搭建 效果评估 结论 第一部分数据处理包括 数据读取 数据标准化格式处理 训练集和验证集数据准备 数据读取 import pandas as pd df pd rea
  • City Horizon

    http acm hust edu cn 8080 judge contest viewProblem action pid 45728 Description Farmer John has taken his cows on a tri
  • C语言文件读写命令

    C语言把磁盘文件看成是字符 或字节 的序列 按照存储信息的形式来说 文件主要是有文本文件和二进制文件 文本文件由一个个字符组成 每个字节存放一个ASCII码制 代表一个字符 二进制文件把内存中的数据按其在内存中的存储形式原样放入磁盘空间 二
  • Linux编程基础之文本文件末尾自动加换行

    目录 前言 hello txt 文件内容 证明 总结 前言 操作系统 Fedora 文本文件末尾会自动加换行 利用 off t oldpos lseek fd 0 SEEK END 指针定位会到最后一个字符 都是换行符 后面一位 相当于什么