Articles of pipe理员

编写自己的shell代码在处理某些pipe道时挂起 – 在C中

我目前正在编写自己的shell作为一个类的项目,并让所有东西都可以工作。 我的问题是我的pipe道,有时他们的工作,有时,他们只是挂起,直到我打断他们。 我已经做了这方面的研究,似乎得到它的stdin写入的函数没有从第一个进程接收EOF; 通常我已经知道问题是pipe道没有closures,但是根据我的代码情况并非如此(据我所知)。 所有redirect工作及其任何变化: ls -l > file1 wc < file1 > file2 以下pipe道命令工作: w | head -n 4 w | head -n 4 > file1 这是行不通的: ls | grep file1 ls | grep file1它显示正确的输出,永远不会结束,除非用户发送一个中断信号。 ls | grep file1 > file2 ls | grep file1 > file2也不起作用。 它挂起而不显示输出,创buildfile2,但从不写入。 无论如何,我希望有一些我错过了别人可以注意到的东西。 我已经在这一段时间了。 让我知道是否有任何我可以提供的代码。 我在下面发布的代码是主文件,没有任何删除。 /* * […]

当RAM完全满载并且新进程想要在embedded式设备上运行时会发生什么情况?

我想知道当我尝试在没有交换分区或交换文件的运行Linux的embedded式主板上运行新进程时会发生什么。 通常,对于PC上的Linux,它将页面从RAM中取出,从而为新进程释放内存。 现在,embedded式主板(以任何开发板为例),运行不带交换的Linux都想要运行一个全新的RAM进程,如何运行一个新的进程? 这些电路板将具有有限寿命的闪存,所以即使实施交换也不能频繁交换。

使用pipe道发送多个string到subprocess

我在Linux有一个任务,我不能得到它的工作。 我有一个程序接收一个文本文件作为参数。 然后使用fork()创build一个subprocess,并将接收到的文本文件的内容作为参数逐行发送给subprocess。 subprocess需要对行进行计数,并返回父进程收到的行数。 这是我到现在为止,但有点儿童进程并没有收到所有的线。 对于我的testing,我用了9行的文本文件。 父母发送9行作为string,但subprocess只收到2或3个。 我究竟做错了什么? #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char string[80]; char readbuffer[80]; int pid, p[2]; FILE *fp; int i=0; if(argc != 2) { printf("Syntax: %s [file_name]\n", argv[0]); return 0; } fp = fopen(argv[1], "r"); if(!fp) { printf("Error: File '%s' does not exist.\n", argv[1]); […]

为什么“猫a.txt | xargs vi“销毁bash?

a.txt : ba.txt的内容 当我inputcat a.txt | xargs vi cat a.txt | xargs vi ,vi打开ba.txt ,一切似乎都OK … 但是当我退出vi的时候,我发现我的bash是不正常的。我看不到我input的指令。我input了ls 。 我看不到它,但是当我按下回车键,结果就显示出来了(用一种奇怪的方法..)…(键入ls ,我键入ll ,有一些中文字符,请忽略它)..而这个bash就是这样的: 有人可以解释吗?

如果父母没有调用wait(),那么相同父项的两个子项不使用pipe道进行通信

请参阅下面的代码: #include<stdio.h> main(){ int pid, fds[2], pid1; char buf[200]; pipe(fds); pid = fork(); if(pid==0) { close(fds[0]); scanf("%s", &buf); write(fds[1], buf, sizeof(buf)+1); } else { pid1 = fork(); if(pid1==0) { close(fds[1]); read(fds[0], buf, sizeof(buf)+1); printf("%s\n", buf); } else { Line1: wait(); } } } 如果我不评论Line1,它工作正常。 请看下面: hduser@pc4:~/codes/c/os$ ./a.out hello //*Entry from keyboard* hello //Output hduser@pc4:~/codes/c/os$ 但是,如果我注释掉Line1,两个subprocess不通信: […]

awk,pipe道和尾巴-f给予意想不到的行为

这是我的示例日志文件。 http://pastebin.com/DwWeFhJk 。 当我在做 tail -f log | awk '{if (NF>3) {print $1}; }' 我得到的结果是正确的 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 64.242.88.10 但是当我在做: tail -f log | awk '{if (NF>3) {print $1}; }' | awk '{print $1}' 我没有得到任何输出。 即使没有输出的情况下 tail -f log | awk '{if (NF>3) {print $1}; }' | grep "64" […]

Linux内核处理内存不足的情况

Linux内核如何处理低内存条件? 我们如何certificate新内核足够好地处理低内存条件? 有没有相同的标准testing?

apt-get在manjaro deepin中没有工作

我已经安装了manjaro deepin 16的全新副本。我无法使用apt-get和yum安装任何软件。 我怎样才能使它工作?

虚拟页面和页面框架的区别?

据我所知,页面来自覆盖,这是由虚拟内存生成的内存空间的集群。 但我不明白是什么框架或如何相关。 任何人都可以解释什么页面和框架是如何工作的?

std :: vector保留方法未能分配足够的内存

我在我的C ++应用程序中有一个缓冲区类,如下所示: class Buffer { public: Buffer(size_t res): _rpos(0), _wpos(0) { _storage.reserve(res); } protected: size_t _rpos, _wpos; std::vector<uint8> _storage; } 有时使用构造函数失败,因为它无法分配所需的内存空间。 例如,一旦使用res = 37调用构造函数,会导致一个段错误,并从其核心转储中获得以下堆栈跟踪: #0 0x00007f916a176ed5 in raise () from /lib/libc.so.6 No symbol table info available. #1 0x00007f916a1783f3 in abort () from /lib/libc.so.6 No symbol table info available. #2 0x00007f916a1b33a8 in ?? () from /lib/libc.so.6 […]