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

ChinaUnix.net

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

论坛徽章:
0
发表于 2009-06-02 18:43 |显示全部楼层
原帖由 beepbug 于 2009-6-2 18:05 发表
以二进制方式打开,定位到这个位置,写入EOF符。
不过,后面那部分,系统没回收。
2楼才是正解。


“不过,后面那部分,系统没回收。”, 系统没有回收是什么意思?

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


以CP/M系(包括后来的DOS)为例。外存分配以簇为单元。所有的空闲簇组成一个空闲链。建立一个文件时,从空闲链里摘取足够的空闲簇,组成一个已用链,对应于这个文件。这个是存储的分配。当文件被删时,将其对应的已用链放回空闲链去,叫存储的回收。
正常的系统,是一条空闲链,加若干条已用链。
文件长度因追加写而增长时,也会引起存储的分配。同样,对文件做截割时,也会引起存储的回收。
譬如,文件系统的簇长是4KB,有一文件,现长4090B,你追加6B,没发生存储分配,再追加1B,就得先从空闲链里摘一个簇,串在原有的簇后,再做写操作。
其它系统,说法不一,但原理大同小异。

论坛徽章:
0
发表于 2009-06-02 20:51 |显示全部楼层
“以二进制方式打开,定位到这个位置,写入EOF符。
不过,后面那部分,系统没回收。”

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

你举一个你熟悉的系统的例子,比如WINDOWS等,要写入什么字符才能将字符后面的部分变为系统没回收的?

论坛徽章:
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?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

创客168第9期:广告与推荐算法

近年来,搜索广告与推荐技术被广泛应用到各大互联网,电商等行业的活动中,尤其是电商大促,广告系统与推荐技术更是尤为重视,,本次沙龙创客168邀京东,当当,58到家,搜狗的资深专家,和大家一起分享他们在推荐技术、搜索广告等方面的应用实践。
----------------------------------------
截止时间:2016年12月24日
活动地点:联合创业办公社.北京中关村E世界空间

报名入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP