问题标签 [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.

0 投票
3 回答
232 浏览

c - 当行 > 1 时 C dup2 覆盖文件错误

我有以下将 infile 连接到 outfile 的简单程序

现在,假设 infile 的内容是

和outfile是

运行程序后,outfile的内容最后多了一个“e”,这样

此外,如果 outfile 是

它成为了

怎么了?

0 投票
2 回答
357 浏览

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的。

因此,代码可以简单地是:

0 投票
1 回答
305 浏览

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-> 挂起
  • 当我不dupstdout 或关闭 dup 时,它不会挂起

这是我能找到的最短的可重现代码,它向我展示了我想更好地理解的行为。

使用 fork/pcntl/etc 从多个 PHP 应用程序/框架中提取它需要几个小时。来衡量他们的关系,即我没有写这个或编造这个;但很明显,由于我把所有东西都拆开,它的整体感觉就消失了。

问题

  • 为什么有些调用会挂起 (php, ssh) 而其他的不会 (ruby) ?
  • 即使我在弹出关闭 fd ,我的程序也会挂起;为什么?
0 投票
2 回答
219 浏览

c - 关闭管道并复制管道

我试图理解管道是如何工作的,当我在教科书中阅读这段代码时,这相当令人困惑。在行

为什么我们要复制fd2[0],然后在复制后立即关闭它?

0 投票
1 回答
216 浏览

linux - 计算 Linux 中文件描述符的重复次数

dup在 Linux 中,可以使用命令 family复制文件描述符。

有没有办法通过系统调用来获取文件描述符的重复数?

0 投票
1 回答
37 浏览

c - 如何将旧描述符与新描述符连接起来?

考虑我已经像函数一样打开了hell.txt文件open()

然后,考虑它将描述符返回为4. 并且hi.txt已经占用了描述符3,所以我想在不使用或功能的情况下连接hell.txt 文件。3dup2fcntl()

是否可以在不使用这两个功能的情况下进行更改?

0 投票
1 回答
6448 浏览

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并进行错误检查以确保它正确打开。我该如何解决这个问题并让它真正执行我想要的真正命令?

0 投票
1 回答
89 浏览

database - 我想知道这句话在汇编语言中的意思

我应该编写一个循环,将零移动到 DATE_TBL 的每个字节:DATE_TBL DB 25 DUP(?)

但我不确定代码 DB 25 DUP (?) 我知道 DUP 表示重复,DB 表示定义字节

0 投票
0 回答
924 浏览

c - 使用 dup 和 dup2 进行多个重定向

我实现了shell的某些部分。其中之一是管道。在解析期间,我执行命令用 dup2 重定向它们的输入/输出。具体来说,我执行以下操作(为简单起见,我不在这里写错误检查,但我会检查代码中的错误)。在解析开始之前我有

命令的执行:

处理管道时,会输出最后一条命令 in p,因此我尝试将其写入 stdout:

但是它会写一个输出然后永远循环,我不明白为什么。一种解决方案是保存所有命令,然后不重定向最后一个命令的输出,但我想当场执行它们。

0 投票
1 回答
3236 浏览

c - 从 linux c 中的文件描述符重定向标准输入

我无法理解以下代码有什么问题。我两次执行完全相同的动作。它第一次工作,第二次失败。

  1. 打开FD
  2. 复制到标准输入。
  3. 关闭标准输入
  4. 关闭原始fd

第二次出现错误,在第 4 阶段,这意味着 FD 已经关闭。