忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
123下一页
最近访问板块 发新帖
查看: 11190 | 回复: 24

请问、c 语言里怎么实现在文件的某个位置写入文件结束符号? [复制链接]

论坛徽章:
0
发表于 2009-06-02 06:48 |显示全部楼层
是用VC++写的控制台程序,是c 程序

我想打开一个已经存在的文件,把文件位置指针移动到文件的某个位置,在这里写入文件结束标记,只保留文件结束标记前面的那些内容,后面的都不要了,

这样该怎么实现呢,我的困惑是,写入文件结束符号的语句是什么呢?


或者,一个类似的情况,用读写的方式打开一个已经存在的文件,用rewind函数把位置指针移动到文件开始的位置,写入文件结束符号,这样,文件就变成空文件了,问题是,该怎么写入文件结束符号呢

高手表走,帮忙则个!我google 了,也百度了,没有结果啊,跪求!

论坛徽章:
0
发表于 2009-06-02 07:41 |显示全部楼层
ftruncate()
truncate 是截断的意思。C 语言参考手册上应有对这个函数的介绍,详询 10086。

论坛徽章:
0
发表于 2009-06-02 09:02 |显示全部楼层
原帖由 langue 于 2009-6-2 07:41 发表
详询 10086。


干嘛不是114

论坛徽章:
0
发表于 2009-06-02 18:05 |显示全部楼层
以二进制方式打开,定位到这个位置,写入EOF符。
不过,后面那部分,系统没回收。
2楼才是正解。
思一克 该用户已被删除
发表于 2009-06-02 18:43 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2009-06-02 20:26 |显示全部楼层
原帖由 思一克 于 2009-6-2 18:43 发表
“不过,后面那部分,系统没回收。”, 系统没有回收是什么意思?


以CP/M系(包括后来的DOS)为例。外存分配以簇为单元。所有的空闲簇组成一个空闲链。建立一个文件时,从空闲链里摘取足够的空闲簇,组成一个已用链,对应于这个文件。这个是存储的分配。当文件被删时,将其对应的已用链放回空闲链去,叫存储的回收。
正常的系统,是一条空闲链,加若干条已用链。
文件长度因追加写而增长时,也会引起存储的分配。同样,对文件做截割时,也会引起存储的回收。
譬如,文件系统的簇长是4KB,有一文件,现长4090B,你追加6B,没发生存储分配,再追加1B,就得先从空闲链里摘一个簇,串在原有的簇后,再做写操作。
其它系统,说法不一,但原理大同小异。
思一克 该用户已被删除
发表于 2009-06-02 20:51 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
84
数据库技术版块每日发帖之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
发表于 2009-06-02 21:09 |显示全部楼层
原帖由 思一克 于 2009-6-2 20:51 发表
“以二进制方式打开,定位到这个位置,写入EOF符。
不过,后面那部分,系统没回收。”

那在文件的一个中间位置写入一个EOF字符就能使EOF后面的部分变为系统没回收的吗

你举一个你熟悉的系统的例子,比 ...


这个跟文件系统有关,windows的文件系统不了解。

传统的UNIX的文件系统的文件模型就是一个大字节袋,lseek一个中间位置写EOF字符,只是修改文件内容,不会修改文件大小。
必须调用文件系统提供的truncate接口来截断文件。

论坛徽章:
0
发表于 2009-06-02 21:16 |显示全部楼层

回复 #2 langue 的帖子

修正一下。truncate() 和 ftruncate() 是两个功能相同的系统调用,存在于 Linux、BSD 等操作系统当中,查看 truncate(2) 即可获取相关说明。
如果是 MSVC,则应该用 _chsize() 函数,可以查 MSDN,详询 10000。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
发表于 2009-06-02 22:28 |显示全部楼层
什么文件系统有EOF?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2016中国系统架构师现状大调查

你心中的系统架构师是什么样子? 你的职业生涯中是否遇到过困惑? 你想得到哪方面的职业规划指引与帮助?本调查围绕时下架构师最关心的技术趋势、架构师的软实力、常用的技术工具,职场调查等,旨在帮助架构师少走弯路,快速成长。
----------------------------------------

调查时间:2016年7月25日-8月25日

PS:认真填写问卷将有机会获得定制款路由器一台~

调查入口>>

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP