C 删除文件最后 n 个字符

2024-04-04

我需要使用 C 代码从文件中删除最后 n 个字符。起初我尝试使用“\b”,但它返回了分段错误。我看到类似问题的有趣答案here https://stackoverflow.com/questions/584639/truncate-file and here https://stackoverflow.com/questions/1311683/is-there-any-basic-way-to-delete-something-from-opened-file,但我更愿意使用mmap如果可能的话,可以使用函数来执行此操作。我知道通过创建临时文件并将字符写入临时文件直到原始文件的某个偏移量来截断文件可能会更简单。问题是我似乎不明白如何使用mmap函数来执行此操作,看不到我需要传递给该函数的参数,特别是address, length and offset。根据我读过的内容,我应该使用MAP_SHARED in flags and PROT_READ|PROT_WRITE in protect.

函数定义说:

void * mmap (void *address, size_t length, int protect, int flags, int filedes, off_t offset)

这是我的主要内容:

int main(int argc, char * argv[])
{
    FILE * InputFile;
    off_t position;
        int charsToDelete;

    if ((InputFile = fopen(argv[1],"r+")) == NULL)
    {
            printf("tdes: file not found: %s\n",argv[1]);
    }
    else
    {
                charsToDelete = 5;
        fseeko(InputFile,-charsToDelete,SEEK_END);
        position = ftello(InputFile);
        printf("Pos: %d\n",(int)position);
        int i;
        //for(i = 0;i < charsToDelete;i++)
        //{
        //  putc(InputFile,'\b');
        //}
    }
    fclose(InputFile);
    return 0;
}

为什么不使用:

   #include <unistd.h>
   #include <sys/types.h>

   int truncate(const char *path, off_t length);
   int ftruncate(int fd, off_t length);

例如:

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

C 删除文件最后 n 个字符 的相关文章

随机推荐

  • .Net CORE Web API 无缓存但仍然发生

    使用 Net Core 和 Visual Studio 2015 我在 net core 中创建了一个 Web API 最近在测试中我意识到我的结果正在被缓存 或至少看起来是 所以我实现了一个响应缓存并将位置设置为无 Route api c
  • 当我在 hql 中使用 join 关键字时,为什么会得到 Path Expected for join

    我有以下 HQL String FIND PRODUCT CLASS ID SELECT pc id FROM ProductClass pc JOIN ProductGroup pg ON pc id pg productClassId
  • 如何将 C# MVC5 Global.asax 迁移到 ASP.NET Core Startup.cs

    有人可以演示如何在 ASP NET Core 中成功声明依赖于主机名的静态项目变量吗 以前 我有类似于下面的代码 使用 Global asax 来识别项目运行的主机名 并设置整个项目可以使用的一些简单的静态变量 如 MvcApplicati
  • 在 GitHub 上显示 pdf 差异

    有没有办法显示两个版本的 pdf 或 doc odf 文件之间的差异 提交信息 现在我只能下载它的任何版本 查看原始 按钮 PDF DOC 和 ODF 文件是二进制格式 不包含纯文本 Git 并不真正支持人类可读的二进制文件差异 它可以生成
  • 使用 IIS ApplicationInitialization remapManagedRequestsTo 功能时返回用于提供静态 html 的自定义响应代码?

    我目前正在使用应用程序初始化 https learn microsoft com en us iis configuration system webserver applicationinitialization IIS 的功能来预热我的
  • 检查对象是数字还是布尔值

    设计一个等价于以下语句的逻辑表达式 x是一个包含三个或五个元素的列表 其中第二个元素是 字符串 Hip 其中第一个不是数字或布尔值 我拥有的 x Head Hip 10 print x 1 is Hip 我的问题 如何检查它是布尔值还是数字
  • 在 MySQL 服务启动时运行 SQL 查询

    我在 mysql 上创建了 HEAP ram 表以加快查询速度 但是mysql服务器重新启动后 我的堆表中的数据没有加载 我的正常表名 productsid 产品名称 状态为 myisam id gt 整数和自动增量 主键 产品名称 gt
  • 检票口:带有 ListView 的 FileUploadField

    我有一个用于上传多个文件的页面 对于每个文件 用户必须指定类型和描述 这就是为什么我不能使用MultiFileUploadField 所以我用RepeatingView with a FileUploadField在每个元素以及我需要的其他
  • python scikit-learn 缺失数据聚类

    我想对缺少列的数据进行聚类 手动执行此操作 我将在没有此列的情况下计算缺少列的距离 使用 scikit learn 不可能出现丢失数据的情况 也没有机会指定用户距离函数 是否有机会对缺失数据进行聚类 示例数据 n samples 1500
  • 如何立即触发timer.Elapsed事件

    我正在使用System Timers Timer类来创建一个计时器Timer Elapsed事件 事情是Timer Elapsed仅在间隔时间过去后才会首次触发事件 有没有办法提高Timer Elapsed启动计时器后立即发生事件 我在中找
  • 有没有办法在 Jenkins 构建队列小部件中显示更多信息?

    在詹金斯状态页面上 我们有以下小部件 它显示 主 作业挂起 5 次 这是合理的 因为每次将代码审查推送到 Gerrit 时 它都会触发该分支上的这些更改的作业 如果我将鼠标悬停在这些 主 链接上 我可以看到环境中的许多有用信息 例如 GER
  • Android Oreo 位置通过 JobIntentService 在后台更新

    我曾经有AlarmManager WakefulBroadcastReceiver 服务做一些后台代码并获取位置更新 从奥利奥开始 这已被弃用 所以现在我使用AlarmManager BroadcastReceiver JobIntentS
  • main() 是 C 中的预定义函数吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C C Java C 中的 main https stackoverflow com questions 1539385 main in c c java c 总的来说 我对编程很陌生 尤其是 C 我
  • 如何以编程方式调用 Maven 依赖插件

    我正在尝试以编程方式调用 maven dependency plugin 我正在使用 Maven 3 版本 问题是 当我通过pluginManager executeMojo session execution 调用它时 我收到以下错误消息
  • 使用 json.net 反序列化静态属性?

    大家好 我有一个如下所示的 JSON totals tokenType string tokenDenomination double count int IDCode string Key string 反序列化为对象的 C 代码是 in
  • 使用 WooCommerce 中的挂钩更新产品价格

    我正在尝试使用元键更新产品正常价格 regular price当产品在 wp admin 中更新时 使用整数或字符串 我想要的用户流程是 打开产品编辑页面 单击更新按钮 页面重新加载后 请看到 regular price 设置为 20 ad
  • 无法从 Windows 调试 Web 应用程序中的 iOS 问题?

    我在 iPad Pro 和 iPhone 7 Plus 上测试 Web 应用程序时发现了一些错误 我无法使用 Windows 或 Android 中的任何浏览器复制这些错误 并且找不到任何在 Windows 中远程调试 Safari 的方法
  • 如何迭代 C# 类查找特定类型的所有实例,然后在每个实例上调用方法

    是否可以 通过反射 迭代对象的所有字段 并在每个字段上调用一个方法 我有一堂课是这样的 public class Overlay public Control control1 public Control control2 我想要一个像这
  • 自动映射器表达式必须解析为顶级成员

    我正在使用自动映射器来映射源对象和目标对象 当我映射它们时 我收到以下错误 表达式必须解析为顶级成员 参数名称 lambda表达式 我无法解决这个问题 我的源对象和目标对象是 public partial class Source priv
  • C 删除文件最后 n 个字符

    我需要使用 C 代码从文件中删除最后 n 个字符 起初我尝试使用 b 但它返回了分段错误 我看到类似问题的有趣答案here https stackoverflow com questions 584639 truncate file and