文件内容上的for循环是否保持文件打开,直到for循环完成?

GP92

我的要求是for循环的每个迭代都要写入for循环中引用的文件:

例如:

# cat test
1
2
3
4
5
6
# j=7; for i in `cat test`; do echo $j >> test; j=$(($j+1)); done
# cat test
1
2
3
4
5
6
7
7
8
9
10
11
12
13

我看到了。但我想知道其中是否有任何危险。假设,如果我尝试使用awk写入相同的文件,它将无法正常工作:

# awk '{print $1+1'} test > test
# cat test
# awk '{print $1+1'} test >> test
# cat test

因此,当我们使用for循环时,它是否占用了内存中文件的所有内容,因此不会引起任何问题?

更新:

我只知道strace命令,只有一点点用于调试。有了它,我似乎看到它使用了内存:

read(255, "#!/bin/bash\nj=7; for i in `cat t"..., 76) = 76
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
pipe([3, 4])                            = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f96dad589d0) = 17888
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGCHLD, {0x43f2b0, [], SA_RESTORER, 0x332f832660}, {0x43f2b0, [], SA_RESTORER, 0x332f832660}, 8) = 0
close(4)                                = 0
read(3, "1\n2\n3\n4\n5\n6\n", 128)      = 12
胸部

您可以在已有的位置完全扩展文件的当前内容`cat test`这就是为什么您可以在不影响循环的情况下写入同一文件的原因-循环不会继续读取文件,并且(原始)内容确实已经在内存中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环打开文件

来自分类Dev

循环打开每个文件

来自分类Dev

while循环-完成<命令而不是完成<文件

来自分类Dev

Python,循环打开文件(dicom)

来自分类Dev

打开文件时无限循环

来自分类Dev

c ++:使用循环打开文件

来自分类Dev

使用 Dir 循环打开文件

来自分类Dev

Javascript获取文件内容循环

来自分类Dev

Javascript获取文件内容循环

来自分类Dev

停止for循环,直到完成工作

来自分类Dev

Android:for循环直到完成才在循环中

来自分类Dev

在while循环中的Java直到循环完成才改变任何内容

来自分类Dev

如何循环打开和关闭文件

来自分类Dev

试图在循环matlab中打开文件

来自分类Dev

Python不在for循环中打印文件内容

来自分类Dev

将文件内容读入循环链接列表

来自分类Dev

循环文件及其在R中的内容

来自分类Dev

Python:在循环写入时扩展文件内容

来自分类Dev

如何使for循环保持活动状态,直到完成,然后将其重新设置为0

来自分类Dev

是否让批处理文件等待打开的文件完成?

来自分类Dev

是否让批处理文件等待打开的文件完成?

来自分类Dev

使用Windows Batch命令循环直到文件存在

来自分类Dev

循环直到grep在文件中找不到文本

来自分类Dev

存储字符串数组并循环直到文件结束

来自分类Dev

如何循环直到从文件中读取所有行?

来自分类常见问题

JavaScript暂停循环直到功能完成

来自分类Dev

循环点直到过程完成?重击

来自分类Dev

停止执行循环,直到功能完成

来自分类Dev

JavaScript暂停循环直到功能完成