Articles of pipe理员

UNIX命名为PIPE文件结尾

我正在尝试使用unix命名pipe道输出正在运行的服务的统计信息。 我打算提供一个类似于/proc界面,通过捕获文件可以看到实时统计信息。 我在我的Python代码中使用类似于这个的代码: while True: f = open('/tmp/readstatshere', 'w') f.write('some interesting stats\n') f.close() /tmp/readstatshere是由mknod创build的命名pipe道。 然后我把它看成数据: $ cat /tmp/readstatshere some interesting stats 大部分时间都可以正常工作。 但是,如果我连续多次login这个条目,有时我会得到some interesting stats而不是一个。 一次或两次,它甚至进入了一个无限循环,直到我杀死它为止。 到目前为止,唯一的解决方法是在f.close()之后放一段500毫秒的时间来避免这个问题。 我想知道为什么会发生这种情况,如果有更好的方法来处理它。 提前致谢

在页面分割内存方面的程序生活

我对x86 linux机器中的分段和分页过程有一个混淆的概念。 如果有人澄清从开始到结束所涉及的所有步骤,会很高兴。 x86使用分页分段内存技术进行内存pipe理。 任何人都可以解释一下,从一个可执行.elf格式文件从硬盘加载到主内存到它死的时候发生了什么。 编译时,可执行文件有不同的部分(文本,数据,堆栈,堆,bss)。 这将如何加载? 如何在页面分割内存技术下build立起来。 想知道如何为加载的程序设置页表? 想知道如何GDT表设置。 如何加载寄存器? 为什么逻辑地址(MMU的分段单元处理的地址是48位(16位的段select器+ 32位的偏移量)),其他的16位是如何存储的呢?任何从ram访问的东西都必须是32位或4个字节,16位的其余部分如何被访问(要加载到段寄存器中)? 提前致谢。 这个问题可以有很多的事情。 但想要澄清一个可执行文件的整个生命周期。 如果有人回答并就此进行讨论,会很高兴。

所有用户在linux上的Matlabsearchpath

如何在Linux系统上为所有用户添加Matlabsearchpath? 我正在pipe理几个人共享的Linux计算机。 我想把一些Matlab * .m文件放在每个人都有读取权限的path上(例如/ usr / local / matlab / our_matlab_scripts /)。 我也想把这个path添加到所有用户的Matlabsearchpath,以便他们可以立即开始使用Matlab文件。 作为一个用户,我了解到我可以通过Matlab的“addpath”命令或者从Matlab的文件菜单中添加searchpath。 但是,到目前为止,我还是无法find一种方法来同时作为所有当前和未来用户的pipe理员。 如果你能教我,我将不胜感激。

在编写C程序时如何设置内存使用限制,如果超过了这个限制会发生什么?

我在linux上编写一个C程序,我想知道: 如何限制我的C程序消耗的总内存? 如果我为c程序设置了一个内存限制,比如说32M,如果它需要比32M更多的内存,会发生什么?

为什么我在32位和64位Linux上看到与pmap在内存使用方面存在很大差异?

我build立了一个新的服务器(64位Debian),并试图使apache进程尽可能小,禁用任何我不需要的模块。 然后我将pmap输出与一个32位Debian盒子上的apache进行了比较,这个盒子上有更多的模块打开。 我很惊讶地发现,64位机器上的“优化”似乎消耗了更多的内存。 pmap -d(只是摘要行)显示: 64bit: mapped: 188584K writeable/private: 14680K shared: 72K 32bit: mapped: 33824K writeable/private: 7304K shared: 888K 仔细观察输出。 我看到.so库的内存分配的差异。 以libc为例 64位: 00007f9988e8d000 1380 rx– 0000000000000000 008:00001 libc-2.11.3.so 00007f9988fe6000 2044 —– 0000000000159000 008:00001 libc-2.11.3.so 00007f99891e5000 16 r—- 0000000000158000 008:00001 libc-2.11.3.so 00007f99891e9000 4 rw— 000000000015c000 008:00001 libc-2.11.3.so 32位: b7501000 1364 rx– 0000000000000000 008:00001 libc-2.7.so b7656000 […]

Linux:好友系统可用内存

任何人都可以解释此代码? page_idx = page_to_pfn(page) & ((1 << MAX_ORDER) – 1); page_to_pfn()已经返回page_idx,那么'&'使用了什么? 或page_to_pfn()返回别的东西?

列出所有用户和他们上次读取邮件,输出到多个输出

我有一个系统,我想做一点清理,所以我想获得所有的用户帐户和他们访问的最后date他们邮寄。 这是一个Debian系统。 到目前为止,我得到了这个: cut -d: -f1 /etc/passwd | xargs -n1 finger | grep "Mail last read" 但是我不知道如何在邮件前写这个用户名最后阅读2012年8月12日星期日03:06(CEST) 谢谢编辑:这是样品手指输出: /bla# finger xxxxx Login: xxxxx Name: xxxxx xxxxx Directory: /home/xxxxx Shell: /bin/true Never logged in. Mail last read Sun Aug 12 03:17 2012 (CEST) No Plan.

pipe道stderr到系统日志里面的自动ftp脚本

我正在使用简单的脚本来自动化ftp。 该脚本如下所示: ftp -nv $FTP_HOST<<END_FTP user $FTP_USER $FTP_PASS binary mkdir $REMOTE_DIR cd $REMOTE_DIR lcd $LOCAL put $FILE bye END_FTP 但我想pipeSTDERR到系统日志和STDOUT到一个日志文件。 通常我会这样做: ftp -nv $FTP_HOST 1>>ftp.log | logger<<END_FTP ftp -nv $FTP_HOST 1>>ftp.log | logger<<END_FTP但在这种情况下,由于<<END_FTP ,将<<END_FTP 。 我应该怎样做才能使脚本工作? 请注意,我只想在脚本中redirect来自FTP命令的输出,而不是整个脚本。

在添加request_mem_region之后,我的驱动程序每次首次访问都会失败,并显示“busy”消息

好的,这对我来说真的很奇怪。 我有一个模拟的CAN总线驱动程序,它是一个Linux内核模块。 然后我有一个testing应用程序在用户空间中运行,通过打开文件描述符并发送ioctl()消息来访问驱动程序。 现在,CAN总线驱动程序只是我在x86平台上运行的(它是在我们的embedded式Coldfire系统上运行的)。 在embedded式系统上,它不得不使用request_mem_region() / ioremap()来访问内存I / O区域,我不需要这样做,但是我想尽可能保持代码的通用性。 这里有一些有用的定义: #define MCF_MBAR 0x10000000 extern unsigned int Base[]; extern unsigned int can_range[]; //This is the CAN registers on coldfire, just unused on my x86 desktop Base[minor] = (MCF_MBAR + 0x1c0000); can_range[minor] = 0x180; 然后在init中我们这样做: if(NULL == request_mem_region(Base[minor], can_range[minor], "CAN-IO")) { return -EBUSY; } can_base[minor] = ioremap(Base[minor], […]

如何在Python中重用Popen的中间结果?

代码是这样的: from subprocess import Popen, PIPE p1 = Popen("command1", stdout = PIPE) p2 = Popen("command2", stdin = p1.stdout, stdout = PIPE) result_a = p2.communicate()[0] p1_again = Popen("command1", stdout = PIPE) p3 = Popen("command3", stdin = p1_again.stdout, stdout = PIPE) result_b = p3.communicate()[0] with open("test") as tf: p1_again_again = Popen("command1", stdout = tf) p1_again_again.communicate() 不好的部分是: command1被执行了三次,因为当我使用commnnicate一次时,那个commnnicate对象的stdout不能被再次使用。 […]