Articles of pipe理员

是读/写pipe道昂贵的操作?

作为我的Uni课程的一部分,我们已经显示并要求使用pipe道在进程之间进行通信(使用pipe()和fork() )进行一些小练习。 没有问题得到它的工作或概念,但在这些要求以外,我想知道如何有效地写和读这种types的pipe道? 如果我有一些值,我打包到一个4字节的块,最好一次打包和写入100个值(如400字节)? 或者,如果我写100个4字节的每个字节性能相当? 一次性传输400字节会阻止接收者在写入完成之前执行任何操作 – 假设接收者只是尝试读取前4个字节,在写完之后能否这样做,但是在所有的400完成之前?

在unix中执行sorting命令

我正在为我的公司编写一个自定义的apache日志parsing器,我注意到一个性能问题,我无法解释。 我有一个1.2GB的文本文件log.txt。 命令:sort log.txt比命令慢了3秒:cat log.txt | 分类 有人知道这是为什么吗?

通过C ++确定程序是否安装在Linux中

我想从我的C ++代码中对Linux程序进行system调用,但我想先检查程序是否安装在用户的机器上。 在Ubuntu中,我可以使用像dpkg -s gifsicle这样的系统调用来确定与该程序关联的软件包是否已安装并parsing其输出。 gifsicle这里是程序名称。 但是,程序(例如gifsicle )可能是从源代码编译的,因此不会出现在Ubuntu软件包仓库中。 确定程序(例如gifsicle )是否可用在执行C ++代码的系统上的一种很好的编程方式是什么?

如何监视monit磁盘I / O?

目前我使用M/Monit来一次监视很多实例。 但我也想知道是否有人试图监视磁盘I / O与监视? 我对磁盘没有什么了不起的了解,所以如果有人能指点我的方向,或者分享一些shell脚本就太好了!

Bash脚本 – 如果和grep不起作用

由于这个社区似乎非常好,所以我想我会问一个问题 – 我有这个小脚本,但它不会从输出中grep超时: #!/bin/bash echo -n "Enter ntp server address: " read SERVER if ntpdc -n -c monlist $SERVER | grep "timed out" then echo "Server won't let You use monlist." exit 0 else echo "Server will let You use monlist." fi 有任何想法吗? 谢谢 :)

使用猫来反弹pipe道之间的angular色

我一直在阅读有关pipe道在Linux中,我遇到了一本书( http://linux-training.be/linuxsys.pdf,16页) 首先他们用mkfifo创build四个pipe道 $ mkfifo pipe33a pipe33b pipe42a pipe42b 将/ bin / cat复制到./ $ cp /bin/cat proj33 && cp /bin/cat proj42 然后运行以下命令 $ echo -nx | ./proj33 – pipe33a > pipe33b $ ./proj33 <pipe33b >pipe33a & 这本书解释了最后的命令 您在上面看到的命令将创build两个proj33进程,使用cat来反弹pipe33a和pipe33b之间的x字符。 我的问题是我不明白最后的命令。 特别是为什么在./proj33和pipe33a之间使用“ – ”。 什么“ – ”做。 而这种设置又如何像交换charatier'x'的无限循环?

父进程和subprocess随机结束(linux,c,fork())

这个任务使用fork和divide和conqueralgorithm从input.dat升序排列数组。 所以我用这个写了一个代码,但是父进程比孩子更快结束。 我的代码中有以下一行,但父母不会等待他们的孩子。 while(wait(NULL)>0); 我的代码的一点解释: 在input.dat中是一个具有以下forms的数组: (数组长)(空格)(第一个数字)(空格)(第二个数字)… 例: 6 2 3 1 4 5 6 所以我读了这个数组,然后把它分解成两个在两个结构体中创build的数组,以便在pipe道中扭动。 之后,我打电话给divitimp函数,对表单做一点解释: (在我的代码)divitimp(readwhilegoingdown(lefeleolvas),writewhilegoingdown(lefeleir),readwhilecomingup(felfeleolvas),writewhilecomingup(felfeleir)) 在divitimp函数启动后,我使用fork,如果它工作(没有错误),我看是否是孩子或父进程(代码是相同的如果和其他),之后(在if)我如果结构中的数组长度不超过两个元素,则从pipe道中读出一个结构我将sorting的结构写入writewhilecominguppipe道而不callbackdivitimp函数,如果数组长度大于2,则将数组分割为两个在两个结构中创build的数组,我写他们writewhilegoingdownpipe道和callbackdivitimp函数。 在这些之后,我想等到subprocess结束,然后使用合并sorting对已sorting的数组进行sorting,然后将结果(eredmeny)写入writewhilecominguppipe道。 divitimp函数完成后,我回到主,并从readwhilegoinguppipe读取解决scheme结构,并将其写入到output.dat。 问题是进程(父母和孩子)以随机顺序结束。 源代码(非常抱歉,但没有代码,我不能解释这个问题): #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> typedef struct{ int n; int a[100]; }TOMB; void divitimp(int lefeleolvas, int lefeleir,int felfeleolvas,int felfeleir){ pid_t pid; int i; if ((pid = fork()) […]

为什么在Linux API和Bash中pipe道可以使用的进程之间的关系是不同的

我想知道为什么在Linux API和Bash中pipe道可以使用的进程之间的关系是不同的。 在Linux API中,无名pipe道( pipe() )只能在父subprocess之间使用。 在Bash中,可以在具有shell进程的两个进程之间使用pipe道作为其共同的父进程。 Bash中的pipe道是用Linux API中的未命名pipe道实现的吗? 谢谢。 来自APUE 3ed: 15.2pipe道 pipe道是UNIX系统IPC的最早forms,由所有UNIX系统提供。 pipe道有两个限制。 从历史上看,它们是半双工的(即数据只在一个方向stream动)。 有些系统现在提供全双工pipe道,但为了最大限度的便携性,我们绝不应该假定情况是这样的。 pipe道只能用于具有共同祖先的进程之间。 通常情况下,一个pipe道是由一个进程创build的,该进程调用fork, pipe道在父进程和subprocess之间使用。 我们将看到FIFO(第15.5节)解决了第二个限制,而UNIX域套接字(第17.2节)解决了这两个限制。 … 15.5个FIFO FIFO有时被称为命名pipe道。 当共同的祖先创build了pipe道时,未命名的pipe道只能在相关的进程之间使用。 但是,使用FIFO,不相关的进程可以交换数据。

由于文件损坏,无法删除Linux下的目录

kt @ rails-ubuntu:〜/ rails / ledger / releases / 20080820144914 / .git / hooks $ ls -al ls:不能访问post-commit:没有这样的文件或目录 ls:无法访问update:没有这样的文件或目录 ls:不能访问post-update:没有这样的文件或目录 ls:不能访问commit-msg:没有这样的文件或目录 ls:不能访问pre-rebase:没有这样的文件或目录 ls:不能访问post-receive:没有这样的文件或目录 ls:不能访问pre-applypatch:没有这样的文件或目录 ls:无法访问预先提交:没有这样的文件或目录 共8个 drwxrwxr-x 2 kt kt 4096 2008-09-09 18:10 drwxrwxr-x 4 kt kt 4096 2008-09-09 18:10 .. – ????????? ? ? ? ? ? 提交-MSG – ????????? ? ? ? ? […]

3G / 1G虚拟分区的优势是什么? 32位的linux内核

虚拟内存I:问​​题[LWN.net] http://lwn.net/Articles/75174/ 特别是硬件的地址转换缓冲区可以在内核和用户空间之间共享。 我完全困惑。 为什么他们可以在虚拟机分离时共享TLB? 我知道有一些CPU的页面全局位 指示TLB条目对于不同的过程是共同的,并且不需要被刷新。 TLB和vm split 3G / 1G之间有什么关系? 请详细评论。 提前致谢。 更新:为什么不使用页全局位来指示TLB条目被操作系统(内核空间)使用? 如果是这样,为什么仍然需要拆分虚拟空间? 例如:TLB中的两个入口(vm线程地址相同),但其中一个全局位置1。 ? 当上下文切换时,只需刷新全局位未设置的条目即可。 这可能吗? Update2:我检查了intel-ia-32架构软件开发人员手册,发现在TLB条目中没有全局位(存在于PDE和PTE中)。 但是当上下文切换时,CPU如何确定TLB条目是全局位还是未设置?