问题标签 [dup]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 当行 > 1 时 C dup2 覆盖文件错误
我有以下将 infile 连接到 outfile 的简单程序
现在,假设 infile 的内容是
和outfile是
运行程序后,outfile的内容最后多了一个“e”,这样
此外,如果 outfile 是
它成为了
怎么了?
c - dup() 和缓存刷新
我是一个C初学者,尝试使用dup()
,我写了一个程序来测试这个功能,结果和我预期的有点不同。
代码:
程序尝试通过复制的 fd 写入,然后关闭复制的 fd,然后尝试通过原始 fd 读取。
我预计当我关闭复制的fd时,io缓存会自动刷新,但事实并非如此,如果我fflush()
在代码中删除该函数,原来的fd将无法读取复制的fd写入的内容,即已经关闭。
我的问题是:
这是否意味着当关闭重复的 fd 时,它不会自动刷新?
@编辑:
对不起,我的错误,我找到了原因,在我最初的程序中它有:
但没有:
使用fclose(f_dup);
后更换即可close(f_dup);
。
因此,如果以适当的方式关闭,重复的 fd 会自动刷新,write()
&close()
是一对,fwrite()
&fclose()
是一对,不应该混合它们。
实际上,在代码中我可以直接使用复制的 fd_dup 和write()
& close()
,根本不需要创建一个新FILE
的。
因此,代码可以简单地是:
c - 为什么 dup() 和 popen() 在从另一个进程调用时阻止我的进程退出?
- 我有一个程序,
popen()
另一个程序也是dup()
标准输出 - 当从另一个进程(如 PHP 示例)或通过 SSH 调用时,该进程不会退出。
process_test.c
:
编译gcc process_test.c
,运行:
./a.out
-> 正常退出ruby -e 'system("./a.out");'
-> 正常退出php -r passthry("./a.out");
-> 挂起ssh remotehost ./a.out
-> 挂起- 当我不
dup
stdout 或关闭 dup 时,它不会挂起
这是我能找到的最短的可重现代码,它向我展示了我想更好地理解的行为。
使用 fork/pcntl/etc 从多个 PHP 应用程序/框架中提取它需要几个小时。来衡量他们的关系,即我没有写这个或编造这个;但很明显,由于我把所有东西都拆开,它的整体感觉就消失了。
问题
- 为什么有些调用会挂起 (php, ssh) 而其他的不会 (ruby) ?
- 即使我在弹出后关闭 fd ,我的程序也会挂起;为什么?
c - 关闭管道并复制管道
我试图理解管道是如何工作的,当我在教科书中阅读这段代码时,这相当令人困惑。在行
为什么我们要复制fd2[0]
,然后在复制后立即关闭它?
linux - 计算 Linux 中文件描述符的重复次数
dup
在 Linux 中,可以使用命令 family复制文件描述符。
有没有办法通过系统调用来获取文件描述符的重复数?
c - 如何将旧描述符与新描述符连接起来?
考虑我已经像函数一样打开了hell.txt
文件open()
。
然后,考虑它将描述符返回为4
. 并且hi.txt
已经占用了描述符3
,所以我想在不使用或功能的情况下连接hell.txt
文件。3
dup2
fcntl()
是否可以在不使用这两个功能的情况下进行更改?
c - 在 C 中的自定义 shell 中执行重定向(“>”和“<”)
我应该用 C 编写一个简单的自定义 shell,它可以只使用“<”和“>”命令来处理重定向。
为此,我解析每个命令(在字符串数组中),检查字符“<”和“>”,然后打开一个文件名open(fd, filename, flags)
以读取或写入。
如果我发出这些命令(其中 % 表示我的 shell),我希望得到以下输出:
但是,当我发出这些命令以及任何命令时,它似乎忽略(但不忽略?)我的重定向。当我发出相同的命令时会发生这种情况:
奇怪的是,它确实创建了一个名为“output.txt”的文件,并向其写入“hello > output.txt”
输入和输出重定向器都会发生这种情况。这里只是打开和执行输出命令的代码。
请注意,open_write_file()
打开带有标志的文件名O_WRONLY | O_TRUNC | O_CREAT, S_RUSR | S_IRGRP | S_IWGRP | S_IWUSR
并进行错误检查以确保它正确打开。我该如何解决这个问题并让它真正执行我想要的真正命令?
database - 我想知道这句话在汇编语言中的意思
我应该编写一个循环,将零移动到 DATE_TBL 的每个字节:DATE_TBL DB 25 DUP(?)
但我不确定代码 DB 25 DUP (?) 我知道 DUP 表示重复,DB 表示定义字节
c - 使用 dup 和 dup2 进行多个重定向
我实现了shell的某些部分。其中之一是管道。在解析期间,我执行命令用 dup2 重定向它们的输入/输出。具体来说,我执行以下操作(为简单起见,我不在这里写错误检查,但我会检查代码中的错误)。在解析开始之前我有
命令的执行:
处理管道时,会输出最后一条命令 in p
,因此我尝试将其写入 stdout:
但是它会写一个输出然后永远循环,我不明白为什么。一种解决方案是保存所有命令,然后不重定向最后一个命令的输出,但我想当场执行它们。
c - 从 linux c 中的文件描述符重定向标准输入
我无法理解以下代码有什么问题。我两次执行完全相同的动作。它第一次工作,第二次失败。
- 打开FD
- 复制到标准输入。
- 关闭标准输入
- 关闭原始fd
第二次出现错误,在第 4 阶段,这意味着 FD 已经关闭。