加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 使用与重定向相同的stdin和stdout文件

发布时间:2020-12-15 18:45:30 所属栏目:安全 来源:网络整理
导读:我正在编写一个像过滤器一样的应用程序:它从文件(stdin)读取输入,处理并将输出写入另一个文件(stdout).在应用程序开始写入输出文件之前,输入文件被完全读取. 因为我使用stdin和stdout,我可以运行是这样的: $./myprog file1.txt file2.txt 它工作正常,但如
我正在编写一个像过滤器一样的应用程序:它从文件(stdin)读取输入,处理并将输出写入另一个文件(stdout).在应用程序开始写入输出文件之前,输入文件被完全读取.

因为我使用stdin和stdout,我可以运行是这样的:

$./myprog <file1.txt >file2.txt

它工作正常,但如果我尝试使用与输入和输出相同的文件(即:从文件读取并写入同一个文件),如下所示:

$./myprog <file.txt >file.txt

它清除file.txt之前程序有机会阅读它.

有什么办法可以在Unix的命令行中做这样的事情吗?

shell在执行程序之前正在准备输出文件句柄.在shell在一个shell命令行中删除文件之前,没有办法让程序读取输入.

您需要使用两个命令,在读取文件之前移动或复制文件:

mv file.txt filecopy.txt
./myprog < filecopy.txt > file.txt

否则输出到副本,然后替换原件:

./myprog < file.txt > filecopy.txt
mv filecopy.txt file.txt

如果您不能这样做,那么您需要将文件名传递给您的程序,该程序以读/写方式打开文件,并在内部处理所有I / O.

./myprog file.txt                 # reads and writes according to its own rules

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读