- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
foo.txt ./fo-6ren">
我在 bash 中追加到文件时遇到一个奇怪的错误,即使我告诉它追加,文本也会被删除。
我有一个 bash 脚本,我在其中执行以下操作
echo "Run program" > foo.txt
./fortran_program >> foo.txt
fortran_program 程序(它的精简版本提供了相同的结果)是:
program main
write(*,*) 'A'
write(*,*) 'B'
end program
这应该在执行后在 foo.txt 中给我 Run program AB
。但是我发现 Run B
而不是原来的文本已被覆盖并且 A
不包括在内。
我执行了 strace -f ./script
并发现了以下看起来相关的输出:
...
[pid 36681] open("foo.txt", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
[pid 36681] dup2(3, 1) = 1
[pid 36681] close(3) = 0
...
[pid 34260] write(1, " A\n", 3) = 3
[pid 34260] lseek(1, 0, SEEK_CUR) = 3
[pid 34260] ftruncate(1, 3) = 0
[pid 34260] write(1, " B\n", 3) = 3
...
从我对此非常有限的理解来看,似乎 A
被写入文件,然后 lseek
被调用,这给出了文件只有 3 个字符长(相同length 作为我尝试写入的第一个字符串),然后 ftruncate
将其截断为 3 个字符(即 Run
),然后将 B
写入文件.
C 中的以下程序 (echo "Run program"> foo.txt; ./c_program
) 重现了该行为,因此它似乎不仅仅与 fortran 相关(尽管只有 ifort 编译代码给出了上面的错误)
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(){
int n, f;
f = open("foo.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
write(f," A\n",3);
n = lseek(f,0,SEEK_CUR);
ftruncate(f,n);
write(f," B\n",3);
}
奇怪的是,当我在我的笔记本电脑上运行上面的代码时,它做了预期的事情并给我 Run Program AB
所以 lseek
导致我使用的集群上的问题,但我对此知之甚少(而且我不知道如何解决)所以我在这里问。
Why does this happen and most importantly: is there a way to fix this?
这很烦人,因为为了避免它,我需要制作一个临时文件并将运行的输出通过管道传输到这个文件中,然后将原始文件与临时文件合并,以获得所需的输出到 foo。 txt
.
我遇到问题的系统规范:
ifort 14.0.2 20140120
gcc 4.4.7 20120313
Linux cluster 2.6.32-431.29.2.el6.x86_64 #1 SMP Sun Jul 27 15:55:46 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
它在哪里工作
gcc 4.8.5
Darwin laptop 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64
最佳答案
我的 Fortran 非常生锈,但我认为默认情况下 Fortran 将每个 write
视为一个单独的记录,这会导致新行(和查找? - 这对我来说似乎是一个错误,也是)。
如果你想抑制这种行为,这可能更接近你正在寻找的东西:
program main
write(*,100, advance='no') 'A'
write(*,100, advance='no') 'B'
100 format (A)
end program
关于linux - 将输出 append 到文件时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356665/
Racket 的 pict , 有几个 combinators for combining other pictures .这些文档包含一个很好的表格,说明其 *-append 组合器的工作方式: 这
我看过 Insert content into iFrame和他们的 fiddle http://jsfiddle.net/8VP4y/3/提出以下我遇到问题的代码。 我已经为下面的问题创建了一个 j
我有一个显示非常奇怪结果的微基准: @BenchmarkMode(Mode.Throughput) @Fork(1) @State(Scope.Thread) @Warmup(iterations =
我想知道是否有人可以回答我使用 StringBuilder 对象在 java 中执行这些语句中的哪一个会更好: 使用 .append(string1 + string 2) 对比 .append(st
假设我有两个相同类型的流。是否可以将一个流 append 到另一个流而无需事先将它们转换为列表? 例子: Stream ms = ...; Stream ns = ...; return ms.app
我有以下有效的 jQuery 代码,但它让我思考是否可以对正在 append 的内容执行 append 操作,而无需指定我想要 append 的内容。 append().append() 并没有达到目
这是为了显示诊断页面的检查。我有一个 .append(not_ok) 但当 swf 文件加载 100% 时,我想删除 not_ok 附加,然后添加一个 .append(ok)。 function ca
x = [[1,2],[2,3],[10,1],[10,10]] def duplicatingRows(x, l): severity = x[l][1] if severity =
我有一个列表,我正在尝试将数据注入(inject)其中。列表如下所示 data2 = ['TECH2_HELP', 'TECH2_1507', 'TECH2_1189', 'TECH2_4081',
为了有效地进行一些 DOM 操作,我分离了一个元素。在这个过程中,我遇到了一个有趣的情况: var $holder = $("#d"); var $wrapper = $("").css("borde
我遇到了图片在移动设备上加载速度不够快的问题。我的元素有一个图像和一个按钮。单击该按钮时,图像向下滑动,另一幅图像从顶部滑动以取代它。这是代码 html CSS .moveF
我正在编写一个包含 10 个遗愿 list 的简单哈希表。使用内置的 hash() 计算索引,然后对表大小取模。但是,当我尝试将该对象 append 到该索引处的存储桶列表时,它会 append 到每
我是 LISP 的新手,我正在尝试处理类的 cond 语句。目前,我正在尝试检查传递的值是否为列表,如果是,则将字母 d append 到列表中。 这是我的代码: (defun test(L) (li
我正在使用 Jquery 将数据 append 到 div。但是,append 语句之后页面上没有显示任何内容。 我尝试使用 $(window).load 来确保页面已加载,但这仍然不起作用。 HTM
我有以下代码; function SetupDropdowns() { var PrevType; dropdown1 = document.getElemen
我想在 smarty 中创建一个数组并在其中执行 append 功能!就像我在 smarty 模板中声明一个变量(如 {assign var=sizearr value=''} )然后我想在循环中向其
请考虑以下代码片段: var ul = $(".list_b").find("li").remove().end(); $.each(Sites, functi
我的日志记录配置中有两个 appenders。其中之一在 ERROR 事件上发送电子邮件。 一个类,我无法控制,垃圾邮件 ERROR 消息。所以我仍然想要那些消息,但不是在两个 appenders 中
我正在尝试制作 editText,我要在其中插入一些文本。在每三个字符之后,我想插入破折号。 例子: 类型:123 结果:123- 现在当光标在破折号后面并且你按下删除键时,我想删除破折号和破折号
当我尝试 append 简单的“hello”时,它会被 append ,但很快就会自动删除。仅当我在下面给出的表单中使用它时,才会出现此问题,如果删除该表单,则不会出现问题,并且 hello 会正确
我是一名优秀的程序员,十分优秀!