Articles of pipe理员

叉和IPC机制

我正在写一个单线程内存的概念应用程序的重要certificate 。 这个应用程序本身并不处理太多的数据,主要是加载GB的数据,然后做一些数据分析。 我不想通过MT实现来pipe理并发,不想实现锁 (即互斥锁,自旋锁,…),所以我决定使用亲爱的旧fork() 。 在内存为CoW的 Linux上,我应该能够高效地分析相同的数据集,而不必使用简单的并行单线程逻辑来显式复制它们(这又是一个概念validation )。 现在我产生了subprocess,用fork()很容易为子任务设置input参数(在这种情况下是subprocess ),但是我必须把结果返回到主进程。 有时这些结果是十亿分之十GB大 。 我想到的所有IPC机制是: PIPEs / Sockets(然后epoll相当于以单线程方式等待结果) 混合PIPEs /共享内存( epoll相当于参考共享内存等待结果,然后将共享内存中的数据复制到父进程中,销毁共享内存) 我还能用什么? 除了显而易见的“走multithreading”,我真的想利用CoW和单线程多进程架构来进行这个概念validation 。 有任何想法吗? 谢谢

是否有基于线程的mprotect?

mprotect()用于保护内存页面,例如使页面为只读。 它为整个过程设置了这种保护,也就是说,如果页面是只读的,则没有线程可以写入该页面。 有没有办法以不同的方式保护页面不同的线程? 例如,1个线程可以写入页面P,而我的程序中的所有其他线程只能从P读取。

用来查询debian仓库的工具/命令(比如repoquery for rpm repository)

我基本上试图查询给定一个存储库URL和包名称的包的最新版本。 因此,如果http://in.archive.ubuntu.com/ubuntu/是存储库&gcc是包名,那么是否有一个命令/工具,这将帮助我find它的最新版本? 我试图使用apt-get和apt-cache问题是我不想将库url添加到/etc/apt/sources.list的框,因为我没有root访问权限。 我试过跑步 apt-get update -o RootDir=<local-dir> 想我可以添加存储库的URL到<local-dir> /etc/apt/sources.list&运行 apt-cache show <pkg-name> -o RootDir=<local-dir> 但是切换root-dir的apt-get更新失败了 chrooting into <local-dir>/ E: Sub-process returned an error code 这可能吗? 还是有其他select?

如何将输出从pipe道命令redirect到文件

我有一个程序分析给定的命令,并将所有参数/程序分配给一个结构。 在执行命令的主程序中,如果给出了“>”,我试图将pipe道命令的输出redirect到一个文件。 例如,我的程序将成功执行该命令 cat filea | grep pattern 但我也想能够执行该命令 cat filea | grep pattern > outfile 作为一个方面说明,了解cmdscan.c的确切机制并不是很重要,因为它是作为帮助程序的一种帮助程序来帮助parsing命令string并填充结构值,这使得更容易检查主程序hsh.c. 而且,argv1和argv2是pipe道的左侧和右侧,所以argv2只在有pipe道时填满。 如果有任何redirect,那么文件的名称将根据redirect存储在infile / outfile中 这是我的主程序hsh.c执行命令: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/fcntl.h> #include <string.h> #define BUFSIZE 500 struct cmd { int redirect_in; /* Any stdin redirection? */ int redirect_out; /* Any stdout redirection? */ int redirect_append; /* […]

将python3输出到dzen2中

我尝试从python3pipe道输出到dzen2,但dzen不会更新。 在bash中: i=0; while true; do; echo $i; (( i++ )); sleep 1; done | dzen2 输出端子: 0 1 2 3… 在python import time i=0 while True: print(i) i+=1 time.sleep(1) 输出端子: 0 1 2 3… python3 while.py | dzen2黑色空dzen2酒吧 bash-loop.sh | dzen2黑色条从0到…

从命名pipe道读取

我必须实现一个“打印服务器”。 我有1个客户端文件和1个服务器文件: #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> int get_line( char *dest, int size ); #define MAX 1024 void main () { char const *pipe = "printservers"; char buffer[MAX]; int fd; get_line( buffer, MAX ); if( mkfifo( pipe, 0666 ) < 0 ) { printf( "Cannot create […]

上次访问时间。 如何挂载根文件系统,一次,norelatime

我已经安装了一个基于Debian 7.2.0(32位)的简单LAMP系统。 在我的服务器上,我想知道每个PHP文件何时被Web服务器使用(访问)。 当我检查php文件的最后访问时间(使用命令ls -alu )时,它们是错误的。 我发现这是因为用于挂载根文件系统的relatime选项。 我试图编辑我的/ etc / fstab,并把norelatime,atime选项,但它不起作用。 我目前的/ etc / fstab是: UUID=d4bb10f1-1428-4ee4-916c-55e800263c3f / ext4 atime,norelatime,errors=remount-ro 0 1 UUID=6db7a3c7-6ff9-43ac-b959-5175039bb84b none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 重新启动后,当我inputmount时,我得到: sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev […]

打开命名pipe道用于写入并在select()中使用它

我的总体目标是将报告信息传递到命名pipe道,如果(并且只有)有读取器连接到该命名pipe道。 如果没有阅读器,我想避免构build报告信息等。由于这是发生在其他数据stream通过select()处理的情况下,我想添加命名的pipe道到“准备写入”。 所以,我想打开一个命名pipe道进行写入,并且需要以select()方式将其提供给select() ,以便在命名pipe道的另一端确实存在读取器的情况下,仅返回select() 。 通常,如果没有阅读器, open呼叫已经挂起; 不幸的是,我不能给一个open动作select() – 只打开文件描述符是有效的。 为了得到一个体面的文件描述符,我正在创build一个虚拟阅读器(我打开命名pipe道阅读自己),然后打开写入,然后closures虚拟阅读器: dummy = os.open(fifoPath, os.O_RDONLY | os.O_NONBLOCK) # ^^^ without the NONBLOCK, this will hang until another process is ready to write fifo = os.open(fifoPath os.O_WRONLY) os.close(dummy) 如果我现在打开另一个读者,他会收到我写入命名pipe道的内容,所以这方面正在工作。 但是现在select()总是返回fifo作为ready-to-write,即使没有阅读器连接: r, w, e = select.select([], [ fifo ], []) print w[0] 这会一直打印fifo值。 写入命名pipe道也不会挂起,不pipe我写了多less: fifo.write('foo') 我写的数据只是丢失,因为没有阅读器连接。 当打开我的虚拟阅读器,我传递的标志O_NONBLOCK […]

页面表总是在内存中? 页表会被换出吗?

我认为页表是由Linux内核维护的,所以页表的内存需求不应该换掉,因为内核没有页面错误的事情。 但是,如果pgd,pmd,pte表全部在主内存中并且从不换出,多级分页的含义不能保存任何内存。 所以我对如何pipe理页表本身感到困惑。

Gnuplot – 每秒钟更新图表

我想绘制一个每秒更改的图表。 我使用下面的代码,它周期性地改变graphics。 但是每次迭代都不会保留以前的迭代点。 我该怎么做? 每秒只有一个点。 但是我想用历史数据绘制图表。 FILE *pipe = popen("gnuplot -persist", "w"); // set axis ranges fprintf(pipe,"set xrange [0:11]\n"); fprintf(pipe,"set yrange [0:11]\n"); int b = 5;int a; for (a=0;a<11;a++) // 10 plots { fprintf(pipe,"plot '-' using 1:2 \n"); // so I want the first column to be x values, second column to be y // […]