我想了解使用dup2
和dup
。
从手册页:
DESCRIPTION
dup and dup2 create a copy of the file descriptor oldfd.
After successful return of dup or dup2, the old and new descriptors may
be used interchangeably. They share locks, file position pointers and
flags; for example, if the file position is modified by using lseek on
one of the descriptors, the position is also changed for the other.
The two descriptors do not share the close-on-exec flag, however.
dup uses the lowest-numbered unused descriptor for the new descriptor.
dup2 makes newfd be the copy of oldfd, closing newfd first if necessary.
RETURN VALUE
dup and dup2 return the new descriptor, or -1 if an error occurred
(in which case, errno is set appropriately).
为什么我需要该系统调用?复制文件描述符有什么用?
如果我有文件描述符,为什么要复制它?
如果您能解释一下并举一个需要dup2
/ 的示例,我们将不胜感激dup
。
谢谢
dup系统调用复制了一个现有的文件描述符,并返回了一个新的文件描述符,该描述符引用了相同的基础I / O对象。
Dup允许Shell执行以下命令:
ls existing-file non-existing-file > tmp1 2>&1
2>&1告诉外壳程序给命令一个文件描述符2,它是描述符1的副本(即stderr&stdout指向相同的fd)。
现在,在 tmp1 文件中显示了在 不存在的文件 上调用 ls 的错误消息以及在 现有文件 上的 ls 的正确输出。
以下示例代码使用标准输入连接到管道的读取端运行程序wc。
int p[2];
char *argv[2];
argv[0] = "wc";
argv[1] = 0;
pipe(p);
if(fork() == 0) {
close(STDIN); //CHILD CLOSING stdin
dup(p[STDIN]); // copies the fd of read end of pipe into its fd i.e 0 (STDIN)
close(p[STDIN]);
close(p[STDOUT]);
exec("/bin/wc", argv);
} else {
write(p[STDOUT], "hello world\n", 12);
close(p[STDIN]);
close(p[STDOUT]);
}
子进程将读取端复制到文件描述符0上,关闭p中的文件描述符,然后执行wc。当wc从其标准输入中读取时,它将从管道中读取。
这就是使用dup实现管道的方式,好吧,现在使用dup一次使用管道来构建其他东西,这就是系统调用的美,您使用已经存在的工具来构建另一件东西,这些工具又是使用等等。最后,系统调用是您在内核中获得的最基本的工具
干杯:)
本文向大家介绍为什么我们需要一个数据库,包括了为什么我们需要一个数据库的使用技巧和注意事项,需要的朋友参考一下 数据库是数据的集合,通常以电子形式存储。数据库的设计通常是为了使其易于存储和访问信息。 好的数据库对任何公司或组织都至关重要。这是因为数据库存储了有关公司的所有相关详细信息,例如员工记录,交易记录,工资详细信息等。 数据库重要的各种原因是- 管理大量数据 数据库每天存储和管理大量数据。使
当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为文件句柄)耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10-20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)。 尽管
我需要在Go中复制一个切片,并读取文档。有一个复制功能可供我使用。 copy内置函数将元素从源片复制到目标片。(作为一种特殊情况,它还会将字节从字符串复制到字节片。)源和目标可能重叠。Copy返回复制的元素数,它是len(src)和len(dst)中的最小值。 但当我这样做的时候: 我的和以前一样是空的(我甚至尝试使用): 你可以去游乐场看看。那么为什么我不能复制一个切片呢?
问题内容: 使用posix的read()write()linux调用,可以确保如果我以串行方式通过一个文件描述符进行写入并通过另一个文件描述符进行读取,以使两个动作彼此互斥…读取文件描述符将始终看到写入文件描述符最后写入的内容? 我相信是这种情况,但我想确定一下,手册页对此没有太大帮助 问题答案: 这取决于您在哪里获得了两个文件描述符。如果它们来自dup(2)调用,则它们共享文件的偏移量和状态,因
问题内容: 我的问题就像标题说的那样:为什么我们需要9个补丁的图像?他们真的那么重要吗?其实,他们真正在做什么?我没有清楚地了解9色块图像的概念。 我知道9补丁图像是可伸缩的。因此,假设我有一些完全适合我的ldpi设备的图像按钮。使用Draw 9-patch工具(android SDK的一部分),我可以标记可缩放区域,并且该图像非常适合hdpi甚至xhdpi设备。边缘会很光滑。 但这真的是很好的实
我正在创造一个游戏。我写了这段代码来创建一个精灵和它的hitbox: 我原本把 但是后来我得到了一个错误,告诉我我的参数需要是pyplay。表面不是没有。 但是,当我将代码更改为时,它给出了以下错误代码:我该怎么办?