Articles of pipe理员

将输出从两个焦油过程输送到一个孩子

我可以把两个命令放到一个单独的孩子中(编辑:其实你不能这样做,请参阅sarnold答案): (echo "1.1 2.2 3.3") && (echo "4.4 5.5 6.6") | cat 哪个输出 1.1 2.2 3.3 4.4 5.5 6.6 我想要做一些类似于tar的输出。 目前我正在分析存储在单个tar文件中的数据,如下所示: tar -x –to-command MySerialiser -f MyData1.tar.xz | MyAnalyser MySerialiser预处理MyAnalyser可以读取的表单中的数据。 我现在想把两个tar文件的输出传送给MyAnalyser 。 我尝试了以下,但输出到达terminal。 (tar -x –to-command MySerialiser -f MyData1.tar.xz) && (tar -x –to-command MySerialiser -f MyData2.tar.xz) | MyAnalyser 我可以用壳做这个吗? 还是我需要重新包装我的tar文件?

你如何获得一个进程已经运行了多久?

有没有办法从/proc目录中获取这些信息? 我希望能够获得每个进程在几秒钟内运行的时间。 编辑:我需要从C ++做到这一点。 对困惑感到抱歉。

可以命令更多从标准input读取?

通常使用更多的命令。 通常使用更多的pipe道。 所以我觉得更多的是从stdin读取的能力。 每个由pipe分隔的命令都是一个进程,而前一个命令只是创buildpipe和dup2写入到更多的stdin。 但是我发现如果我在控制台中input“more”,就会出现一些用法。 那么这是怎么回事?

Shell脚本无法将文件数据传递到shellinput

cal April 2012 | cat > t | cat < t | more 为什么它什么都没有显示 为什么不显示 April 2012 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

分叉处理/读取通过pipe道慢速写入

回答 https://stackoverflow.com/a/12507520/962890 这是如此微不足道! 但收到很多好的信息。 谢谢大家。 编辑 链接到github: https : //github.com/MarkusPfundstein/stream_lame_testing 原来的post 我有一些关于IPC通过pipe道的问题。 我的目标是接收每个TCP / IPstream的MP3数据,通过LAMEpipe道将其解码为wav,做一些math计算并将其存储在磁盘上(作为wav)。 我正在使用非阻塞IO的整个事情。 让我感到恼火的是,tcp / ip读取比pipe线槽更快。 当我发送一个〜3 MB的MP3文件在几秒钟内读取在客户端。 一开始,我还可以写入瘸subprocess的标准input,而不是停止写入,它会读取其余的mp3,如果完成,我可以再次写入跛脚。 4096字节大约需要1秒(从跛脚写入和读取)。 这很慢,因为我想解码我的wav分钟128kbs。 操作系统是在这台微型计算机上的debian 2.6内核: https://www.olimex.com/dev/imx233-olinuxino-maxi.html 65 MB RAM 400 MhZ ulimit -n | greppipe道返回512 x 8,意味着4096这是好的。 它是一个32位系统。 奇怪的是这个 my_process | 跛脚 – 解码–mp3input – output.wav 走得非常快。 这是我的fork_lame代码(它必须将我的过程的粗壮连接到跛脚标准,反之亦然) static char * const k_lame_args[] = […]

保留RAM中的数据,同时允许其他进程在Linux C ++中访问它

目前我在linux下debugging一个程序,如下所示: int main(){ loadHugeFile(); processTheDataOfTheFile(); return 0; } 事情是loadHugeFile函数需要加载一个非常巨大的文件,需要大约5分钟,而processTheDataOfTheFile花费不到10秒计算所需的数据并返回一些值。 将来,文件的大小可能会进一步增加,并且需要更多时间来加载。 该文件是一个倒排索引,所以整个文件是必要的。 是否有可能有一个进程加载这个文件到RAM中,保留它,并有任何其他进程访问这部分加载的文件? 这是跳过了很多分钟加载。 我记得Windows有这个function,允许你访问/修改另一个进程的内存,但是我在Linux上有什么可用的select吗?

Valgrind Memcheck输出

我正在使用valgrind在我的系统上查找内存泄漏,并且我收到了这个输出 ==9697== Memcheck, a memory error detector ==9697== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==9697== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==9697== Command: bin/vfirewall-monitor ==9697== ==9697== ==9697== HEAP SUMMARY: ==9697== in use at exit: 0 bytes in 0 blocks ==9697== total heap usage: 1 allocs, 1 […]

linux中pipe道之间的通信

我有两个函数writer()和reader() 。 我正在写入消息到writer()函数的pipe道中,并从reader()函数中读取它。 我面临的问题是信息正在写在pipe道中,但没有被读取。 也许在打开阅读pipe道有问题。 代码是: #include<iostream> #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> using namespace std; //edit int fifo = mkfifo("/tmp/mypipe", S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); void writer() { char message[] = "this is a message"; int fd; fd = open("pipe" , O_WRONLY); write(fd , message , sizeof(message)); cout<<"message wrote: "<<message<<"\n"; // gives output […]

解释dup()系统调用

当涉及到复制文件描述符时,我可以得到dup()函数的一个非常愚蠢的解释吗? 我想使用pipe道,但是我也必须让孩子从pipe道读取(这是简单的部分),但是将数据写回到父节点。 我应该使用另一个pipe道,还是可以使用同一个pipe道?

将命令的pipe道结果作为参数

我想要得到rpm -qa | grep something的结果 rpm -qa | grep something ,然后运行结果我得到了rpm -ql result-i-got ,并在一行。 我发现这个工作: rpm -ql $(rpm -qa | grep something) 我想知道,有没有更好的甚至是不同的方法来得到与我上面写的相同的结果? 谢谢。