免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 22275 | 回复: 11
打印 上一主题 下一主题

linux C语言关于删除文件中的一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-18 18:06 |只看该作者 |倒序浏览
本帖最后由 yang200218 于 2010-03-18 18:07 编辑

我想删除文件中的特定的一行或者多行,我现在是把不匹配的行写到临时文件中,然后再rename回来,
不知道大家有没有好的方法。

比如说文件是这样的:

china
france
american
german
china
canada


我想把包含china的那行删除掉。

请大家指点一下。

谢谢!

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2010-03-18 18:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2010-03-18 18:12 |只看该作者
{:3_195:},这是流式的痼疾,。。。只能在内存中完成,再写回去。。

论坛徽章:
0
4 [报告]
发表于 2010-03-18 18:49 |只看该作者
我也想学习一下,找机会多练习。

论坛徽章:
0
5 [报告]
发表于 2010-03-18 19:38 |只看该作者
回复 3# peidright


UNIX系统的磁盘文件不是流式文件。只是可以用stream方式操作而已。
流式I/O是数据流,不能被seek定位(不能追溯过去的内容)。比如stdin, stdout, stderr是典型的数据流式文件,还有socket等.

硬盘上的文件可以用数据流方式操作,仅仅为了扩展gets, puts, getch, putch,fprintf等流式操作而已。

有的认为无内固结构的字符组成的文件就是流式文件是不对的。

论坛徽章:
0
6 [报告]
发表于 2010-03-18 19:53 |只看该作者
回复 5# 思一克


明白了。这里有这样一个疑问:
1个文件,存储在两个blk上,现在需要给文件增加一行,而这一行的位置应该插入在第一个blk之后,
现在有两个选择,
第一种是再分配一个blk,并且重写第二个blk,和第三个blk中的内容。(好像流式的api会促使这样?)
还有一种是: 只将添加的这一行写入新分配的chunk,然后重新组织三个 blk的关系。


这里有个疑问:
文件系统应该设计成第一种,还是第二种呢?或者是这种适合插入数据的系统,应该在文件系统上面的那层系统去实现。

论坛徽章:
0
7 [报告]
发表于 2010-03-18 20:04 |只看该作者
回复 6# peidright


文件这一层没有块的概念。就是连续的字节(字节数组)而已。
有块的概念的文件是数据库文件,有记录。

块是磁盘管理那一层的。该层的数据不是文件,而是磁盘上的块。

字节数组不适合插入和中间删除。如果需要大量快速插入和删除,应该用数据库。
数据库实际也没有中间插入和删除,只是在应用层该你的感觉是这样而已。

论坛徽章:
0
8 [报告]
发表于 2010-03-18 20:07 |只看该作者
,这是流式的痼疾,。。。只能在内存中完成,再写回去。。
peidright 发表于 2010-03-18 18:12



    一个文件很可能会超过内存的大小。

论坛徽章:
0
9 [报告]
发表于 2010-03-18 20:42 |只看该作者
回复 7# 思一克

还是有疑问。磁盘管理和文件安是分层的,但是对于一个文件,如果先读入内存,在其中增加一行,再全部写回fd,,我还是觉得可能会导致
那一行后面的数据所在的blk全部被重写。对于增加一行的这样的操作,觉得可能需要提供专门的接口,而文件系统的块那一层,也应该提供
对应的实现,就是增加一行,只修改一个blk.会更高效?

论坛徽章:
0
10 [报告]
发表于 2010-03-18 20:48 |只看该作者
回复 9# peidright


底层如何实现能方便插入(删除)一行不同文件系统不一样。
但一般是不考虑这个的。
因为什么?因为TEXT文件的一行的长度是不固定的。
不可能是行长永远等于块大小的情况。

比如块大小4096, 而你行长是100,这样后面的行必然都要重新写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP