Articles of pipe理员

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标志。

使用istream从命名pipe道读取

是否有可能使用c ++(stl)使用stream从命名pipe道(mkfifo)读取 – 因此不会事先为读取操作定义char *buffer[MAX_SIZE] ? 我想读取,直到缓冲区结束并把结果放入std::string 。 (当前方法: bytes = read(fd, buffer, sizeof(buffer));事先要求分配某种缓冲区。

编写linux shell

我正在学习Unix C并为练习做一些练习。 我目前正在编写我自己的shell,其工作方式类似于linux bash shell。 我下面的代码提供了一个相当基本的shell。 它现在提供I / Oredirect。 我正在尝试添加对pipe道的支持。 最初,我只想添加对单个pipe道的支持。 我试图通过一些在线教程,但不能完全弄清楚从哪里开始。 目前,下面的shell可以处理下面的命令命令。 ls> abc,cat <file1> file2等 #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <string.h> #include <sys/wait.h> #include <fcntl.h> #define TRUE 1 int main(void) { char *arg_list[10]; int status; int counter = 0; int counter2 = 0; pid_t pid; char buf[100]; char inFile[10]; […]