Articles of pipe理员

在进程之间进行通信时,队列对pipe道有什么优势?

使用pipe道上的2个队列在进程之间进行通信的好处是什么(如果有的话)? 我打算使用multiprocessing python模块。

在C中实现pipe道

我正在尝试在C中实现pipe道,例如 – $ ls | wc | wc $ ls | wc | wc 我写了下面的代码 – #include<stdio.h> #include<stdlib.h> #include <unistd.h> void run_cmd(char *cmd, int* fd_in, int* fd_out) { int c = fork(); if (c==0) { if (fd_in != NULL) { close(fd_in[1]); dup2(fd_in[0], 0); } if (fd_out != NULL) { close(fd_out[0]); dup2(fd_out[1],1); } execlp(cmd, cmd, NULL); […]

Linux命令输出作为另一个命令的参数

我想传递一个命令元素的输出列表作为另一个命令的参数。 我发现了其他一些网页: 如何在stdout上显示一个Linux命令的输出,并将其输出到另一个命令? 使用bash命令的输出(使用pipe道)作为另一个命令的参数 但他们似乎更复杂。 我只是想将一个文件复制到每个调用Linux find命令的结果。 这里有什么问题? find . -name myFile 2>&1 | cp /home/myuser/myFile $1 谢谢

Linux的拼接(2)在从TCP套接字拼接时是否工作?

我一直在写一个有趣的小程序,在Linux上用C语言通过TCP传输文件。 程序从套接字读取文件并将其写入文件(反之亦然)。 我最初使用读/写和程序正常工作,但后来我了解拼接,并试图试一试。 我用splice编写的代码在从stdin(redirect文件)读取并写入TCP套接字时工作正常,但是从套接​​字读取并写入stdout时,将拼接设置errno立即失败到EINVAL,从而立即失败。 手册页指出,当任何一个描述符都不是pipe道时,EINVAL被设置(不是这种情况),为无法search的stream传递一个偏移量(没有偏移量通过),或者文件系统不支持拼接,这导致我对我的问题:这是否意味着TCP可以从pipe道拼接,但不是? 我包含了下面的代码(减去error handling代码),希望我做了一些错误的事情。 它很大程度上基于维基百科拼接的例子 。 static void splice_all(int from, int to, long long bytes) { long long bytes_remaining; long result; bytes_remaining = bytes; while (bytes_remaining > 0) { result = splice( from, NULL, to, NULL, bytes_remaining, SPLICE_F_MOVE | SPLICE_F_MORE ); if (result == -1) die("splice_all: splice"); bytes_remaining -= result; } } […]

在pipe道的命令行中创build文件时,如何指定压缩文件中的文件名?

我试图创build一个压缩文件的文件内容正在pipe道,例如 mysql [params and query] | zip -q output.zip – 这会正确写入压缩文件,但是当您打开压缩文件时,其中的文件被称为“ – ”。 有什么办法指定什么文件中的pipe道数据应该在压缩?

Linux乐观的malloc:当内存不足时总是会抛出新的东西?

我一直在阅读有关Linux上的内存不足的情况,手册页中的以下段落让我想到: 默认情况下,Linux遵循乐观的内存分配策略。 这意味着当malloc()返回非NULL时,不能保证内存真的可用。 这是一个非常糟糕的错误。 如果事实certificate系统内存不足,一个或多个进程将被臭名昭着的OOM杀手杀死。 […] 考虑到操作者的新实现最终会在某个时候调用malloc,有没有什么保证新的实际上会扔在Linux上呢? 如果没有,如何处理这个明显无法察觉的错误情况?

C程序在Linux上耗尽内存

我想编写一个程序来消耗所有可用的内存来理解结果。 我听说linux一旦无法分配内存就开始查杀进程。 任何人都可以帮助我这样一个程序。 我已经写了下面的内容,但是内存似乎没有用尽: #include <stdlib.h> int main() { while(1) { malloc(1024*1024); } return 0; }

在linux中的内存分配是否无阻塞?

我很好奇,知道是否使用默认的新运算符分配内存是一个非阻塞操作。 例如 struct Node { int a,b; }; … Node foo = new Node(); 如果多个线程试图创build一个新的节点,并且如果其中一个线程在分配过程中被操作系统暂停,是否会阻止其他线程的进展? 我问的原因是因为我有一个并发的数据结构,创build新的节点。 然后我修改了algorithm来回收节点。 这两种algorithm的吞吐量性能在24核心机器上几乎是相同的。 然后,我创build了一个在所有系统内核上运行的干扰程序,以便尽可能多地创build操作系统。 创build新节点的algorithm的吞吐量性能相对于再循环节点的algorithm减less了5倍。 我很想知道为什么会发生这种情况。 谢谢。 *编辑:指向我的Linux内存分配器的代码也将有所帮助。 我试图在发布这个问题之前寻找,但无法find它。

如何处理Linux / Python的依赖关系?

由于缺乏对一些我想使用的库的支持,我将一些Python开发从Windows移植到了Linux开发中。 我花了大半天的时间搞乱依赖关系。 这个问题 每当我拿起Linux时,通常会遇到某种依赖性问题,通常是使用开发库,无论它们是通过apt-get,easy_install还是pip安装的。 我可以浪费时间在简单的任务上,花更多的时间在图书馆工作,而不是写代码。 我在哪里可以学习处理这些问题的策略,而不是漫无目的地用Googlesearch一个遇到同样问题的人呢? 一个例子 只是一个例子:我想要生成一些QR码。 所以,我想我会使用基于pyqrcode.sourceforge.net github.com/bitly/pyqrencode,但据说没有Java的依赖。 还有其他的( pyqrnative , github.com/ Arachnid / pyqrencode ),但是这似乎是我需要的最好的select。 所以,我在pypi上find了这个软件包,并且认为使用这个软件包会让生活更轻松: (通过使用virtualenv使事情保持整洁,我可能使自己的生活变得更加困难。) (myenv3)mat@ubuntu:~/myenv3$ bin/pip install pyqrencode Downloading/unpacking pyqrencode Downloading pyqrencode-0.2.tar.gz Running setup.py egg_info for package pyqrencode Installing collected packages: pyqrencode Running setup.py install for pyqrencode building 'qrencode' extension gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes […]

如何强制程序出现内存不足?

我有一个C / C ++程序可能会挂在内存不足时。 我们通过同时运行多个副本来发现这一点。 我想debugging程序,而不会完全破坏开发机器的性能。 有没有办法限制可用的内存,以便一个新的或malloc将返回一个NULL指针之后,比如500K的内存已被请求?