Articles of pipe理员

POSIX:FreeBSD vs Linux中的pipe道系统调用

在Linux(2.6.35-22-generic)中, man pipe指出 pipe()创build一个pipe道,一个可用于进程间通信的单向数据通道。“ 在FreeBSD(6.3-RELEASE-p5)中, man pipe指出 pipe()系统调用创build一个pipe道,这是一个允许双向数据stream的对象,并分配一对文件描述符。 一个是单向的,另一个是双向的。 我希望这不是一个愚蠢的问题,但哪种方法是这样做的标准方式? 他们都符合POSIX? 为了使我的意图清楚,我相信pipe()是一种方法,并且正在寻找一些弹药以获得任何点数,因此在考试中丢失了一些分数; p

在添加新的veth界面时运行脚本

Docker为每个创build的容器创build一个连接到桥( docker0 )的veth接口。 http://docs.docker.io/use/networking/ 我想限制这些新的veth接口的带宽。 我find了一个与奇迹般的做法。 不过,我想自动化这一点。 有没有办法让钩子在每次连接一个新的veth接口时运行一个脚本? 我已经研究过在/etc/network/if-up.d/添加脚本,但是只有在启动时veth添加veth 。 以下是我想要通知的一些系统日志。 我知道我可以尾巴这些日志,但是这种方法似乎有点哈克,必须有一种方式通过操作系统得到这个事件的通知。 May 2 23:28:41 ip-10-171-7-2 kernel: [22170163.565812] netlink: 1 bytes leftover after parsing attributes. May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.720571] IPv6: ADDRCONF(NETDEV_UP): veth5964: link is not ready May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.720587] device veth5964 entered promiscuous mode May 2 23:28:42 ip-10-171-7-2 avahi-daemon[1006]: Withdrawing […]

Linux如何计算MemFree

我想了解我的embedded式Linux内存使用情况。 通过使用top工具和进程文件/ proc / meminfo,我可以看到进程正在使用多less虚拟内存,以及系统有多less物理内存可用。 但是对于任何给定的进程看来,虚拟内存可以比使用的物理内存高得多。 由于这是embedded式系统内存交换禁用(SwapTotal = 0) linux如何计算自由物理内存? 因为它似乎没有考虑在虚拟内存空间中分配的所有内容。

使用pipe道编写gzipped输出文件,无需额外的磁盘空间

我有以下实现的function,用于读取没有磁盘使用gzipped文件。 #include <fstream> #include <stdlib.h> // for mkstemp() and std::system() #include <memory> #include <errno.h> #include <cassert> #include <unistd.h> // for ::close() and unlink() void foo (std::ifstream& in, std::string& fileName) { char tmpName[] = "/tmp/tmp.XXXXXX"; const int fileDescriptor = mkstemp(tmpName); if (fileDescriptor >= 0) { std::string tmpFileName (tmpName); ::close(fileDescriptor); unlink(tmpFileName.c_str()); std::string cmd= "mkfifo " + tmpFileName; […]

如何检测内存不足段错误?

如何检测segfault是否由内存不足造成的? 我有一个段错误,valgrind和duma / efence,因为它似乎崩溃这些工具(Valgrind“不可能发生的事情”,杜马:“mprotect()失败:无法分配内存”诊断) 应用程序(Gazebo)只是崩溃了一个段错误,堆栈跟踪似乎没有提供许多提示,为什么。 TLDR: 是否有简单的工具或方法来确认或排除内存不足的情况是导致段错误的原因? (顶部在崩溃前不显示过多的内存使用量)

两个进程如何不通过pipe()来相互交谈?

鉴于此代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <unistd.h> #define BUF_SIZE 256 int main() { int fd1[2]; int fd2[2]; ssize_t numRead = -1; // remark : working under the assumption that the messages are of equal length const char* messageOne = "Hello world , I'm child number 1\n"; const char* messageTwo = "Hello […]

docker容器如何比主机操作系统有更多的内存?

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE Image_Name latest d8dcd701981e About an hour ago 6.565 GB 我正试图在我的客户操作系统(ubuntu14.04)中运行这个镜像,这是使用虚拟盒子运行的。 我已经为我的客户操作系统(Ubuntu 14.04)分配了4GB内存,但是当我在客户操作系统中运行我的容器并使用docker stats gigantic_cori检查docker docker stats gigantic_cori它显示内存限制为5.028GB。 这怎么可能?? CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O gigantic_cori 0.02% 4.6 GB / 5.028 GB 2.02% 44.43 MB / 20.51 MB 580.2 MB / 3.196 […]

Linux的所有C程序的加载地址是否通用?

比方说,我有一个prog1.c是build立为prog1.out。 在prog1.out有一个链接器的信息,将告诉哪里将加载精灵。 这些地址将是一个虚拟地址。 装载程序将查找这些信息,并将其作为一个进程启动。 像DS,BSS这样的每个部分都将被加载到链接器中提到的虚拟地址上。 例如,我有prog2.out,也有相同的加载器地址,BSS,DS等,那么它会冲突? 我知道这不会冲突,但会有性能问题。 由于这两个进程具有相同的虚拟地址,但它们映射到不同的物理地址? 我很困惑,它如何保护具有相同虚拟地址的两个进程。

如何懒惰分配归零内存?

根据我的理解,我必须在分配零内存的calloc和可以根据需要分配内存的malloc之间进行select。 是否有一个function,结合这两个属性? 也许直接调用mmap ? 如果可能的话,为什么calloc不行呢?

将pipe道焦油提取成焦油创build

我现在有一个tar.gz,我想从中提取一个或两个文件,并将它们打包/添加到一个新的tar.gz中。 当然,我可以保存到一个临时文件并使用它,但是ABSOLUTE的要求是不需要任何中间文件输出即pipe道。 换句话说,我想要的是像下面的伪代码(显然语法是不正确的) tar -xvf first.tar.gz subdir1/file1 subdir2/file2 | tar cf – | gzip > second.tar.gz 有谁知道这个适当的语法? 我已经尝试了很多变种,但无济于事。 我也很喜欢使用cpio的想法,但是又一次,我被如何正确地获得语法所困扰,并且从我的理解中,cpio只会使用档案或文件名,而不是文件。 任何帮助将不胜感激。 编辑:在压缩包内没有特定的文件名模式来提取。 鉴于BSD和GNU tar一次只能search一个模式,我不确定是否甚至可以分别使用include / exclude标志。