Articles of pipe理员

无法连接到远程MongoDB服务器

我正在尝试创build一个远程MongoDB服务器来处理我的Java项目。 我正在使用stream浪者+ ansible创造环境,但可惜我无法获得连接。 我总是通过networking拒绝连接。 本地主机上的相同代码完美地工作。 我正在使用stream浪汉箱: chef/centos-6.5 我的任务如下: – name: Download EPEL Repo get_url: url=http://dl.fedoraproject.org/pub/epel/6/x86_64/epel- release-6-8.noarch.rpm dest=/tmp/epel-release-6-8.noarch.rpm – name: Install EPEL Repo command: rpm -ivh /tmp/epel-release-6-8.noarch.rpm creates=/etc/yum.repos.d/epel.repo – name: Install libselinux-python yum: name=libselinux-python – name: Create the repository for 10Gen copy: src=10gen.repo.j2 dest=/etc/yum.repos.d/10gen.repo – name: Create the EPEL Repository. copy: src=epel.repo.j2 dest=/etc/yum.repos.d/epel.repo – name: Create […]

munmap()与私有匿名映射的ENOMEM失败

我最近发现,如果VMA(虚拟内存区域)结构的数量超过vm.max_map_count,那么Linux不能保证使用munmap()可以释放使用mmap()分配的内存。 Manpage明确指出: ENOMEM The process's maximum number of mappings would have been exceeded. This error can also occur for munmap(), when unmapping a region in the middle of an existing mapping, since this results in two smaller mappings on either side of the region being unmapped. 问题是如果可能的话,Linux内核总是试图合并VMA结构,即使对于单独创build的映射,munmap()也会失败。 我能写一个小程序来确认这个行为: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include […]

在C中的subprocess和父进程之间的通信linux:父进程不阻塞

我想让父进程和subprocess在C使用pipe道进行通信。 首先,我想要父母传递一个string,然后孩子承认它。 我创build了两个文件描述符。 一个为父母对孩子即读音pipe和另一个反向笔pipe。 问题是它不把我的数据作为input。 另外,我希望printf语句(如“input您的数据”)被打印一次,但自fork之后,有两个进程,所以它们被显示两次。 任何替代scheme? //readpipe[0] = child read //readpipe[1]= parent write //writepipe[0]=parent read //writepipe[1]=child write #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <string.h> int main(void) { pid_t pid; int r; /* Hope this is big enough. */ char buf[1024]; char cp[50]; char ans; int readpipe[2]; int writepipe[2]; int a; int […]

Linux:如何检查进程可用的最大连续地址范围

我想在命令行中inputpid,并取回未被保留的最大的连续地址空间。 有任何想法吗? 我们的32位应用程序运行在64位RHEL 5.4上,运行了一段时间,比如说24小时。 那个时候内存使用量只有2.5GB,但是内存出错了。 我们认为它无法映射大型文件,因为应用程序的内存空间是分散的。 我想出去到生产服务器,只是testing这个理论。

在“分叉”进程的同时,为什么Linux内核为每个新创build的进程拷贝内核页表的内容呢?

以下讨论适用于32位ARM Linux内核。 我注意到,在分叉过程中,Linux内核将内核页表(master page table,即swapper_pg_dir )的内容复制到每个新创build进程的页表中。 问题是: 为什么打扰呢? 为什么不能为每个新创build的进程共享单个内核页表副本(关于32位ARM Linux的更高的1G部分),而不是memcpy交换页表? 这是浪费内存吗? 相关源代码(“ – >”代表函数调用): do_fork – > copy_process – > copy_mm – > dup_mm – > mm_init – > mm_alloc_pgd – > pgd_alloc – > /* * Copy over the kernel and IO PGD entries */ init_pgd = pgd_offset_k(0); memcpy(new_pgd + USER_PTRS_PER_PGD, init_pgd + USER_PTRS_PER_PGD, […]

mlock() – 页面是静态的,还是可以在物理RAM中移动?

根据mlock()手册页: 当呼叫成功返回时,包含指定地址范围一部分的所有页面保证驻留在RAM中; 页面被保证留在RAM中,直到后来解锁。 这是否也保证这些页面的物理地址在其整个生命周期中是恒定的,或者直到解锁? 如果没有(也就是说,如果它可以被内存pipe理器移动 – 但仍然保留在RAM中),有什么可以说的新位置,或事件发生这样的变化? 更新: 关于RAM中locking页面的一致性,可以说任何东西吗? 如果CPU有caching,那么mlock-ing保证与caching的RAM一致性(假设回写caching)?

在Ubuntu的单声道和非托pipe代码

我使用在Ubuntu 12 x64上运行的Mono 2.10。 现在我需要知道如何使用非托pipe代码。 [DllImport("libc.so")] public static extern int getpid (); 而且,在下一步我有: getpid(); 我收到这个错误 $ MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono libc_test.exe Mono: DllImport attempting to load: 'libc.so'. Mono: DllImport loading library: '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'. Mono: DllImport error loading library '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared object file: No such file or directory'. Mono: DllImport loading library: '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'. Mono: DllImport error […]

Linux内核/ proc FIFO /pipe道

我目前正在尝试创build一个内核模块,它将根据内核事件生成数据,并将它们推送到一个文件中。 在阅读后,这是不好的(我同意),我决定将一个/ proc文件中的数据放在一个用户程序可以从必要时拉的数据更有意义。 然而,这个想法导致了各种各样的问题,特别是在何时以及如何清除这个文件。 所以我想……“为什么我不在/ proc中创build一个命名pipe道,并从中读取? 我有一个为proc文件设置读取函数和写入函数的一般要点,但是我仍然有一个概念上的麻烦,我怎么去做这件事。 也就是说,我将如何编写这样一个函数来获取任意数据并将其写入内核的pipe道? 有没有人有任何想法如何将数据从内核空间推送到命名pipe道? 最后,它不一定是/ proc文件(特别是如果我这样做是错误的),但这是我来到的结论。 然后,我将不得不弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题。

Linux如何保护内存?

我感兴趣的是从组装的angular度来看linux如何在保护模式下运行。 当把CPU置于i386:0x86_64机器的保护模式时,使用哪些寄存器和中断? 我理解内存pipe理是如何工作的,当我看着像mmap和mprotect这样的函数的c源代码,然而什么让我无法接pipe程序集呢? 我在哪里可以得到更多的信息呢?

UNIX / Linux IPC:从pipe道读取。 如何知道运行时的数据长度?

我有一个subprocess生成一些可变长度的输出,然后使用半双工pipe道将其发送给父进程。 在父,如何使用read()函数? 由于每次数据可以有不同的长度,我怎么能在运行时知道数据的大小来做缓冲区的任何malloc()? fstat()函数可以在pipe道文件描述符上使用吗? 我知道read()函数将读取指定数量的字节,但如果在请求的字节被读取之前到达文件结尾(而不是EOF字符),将返回0。 我专门运行一个2.6.27-9内核的Ubuntu GNU / Linux。 理查德·史蒂文森在UNIX环境下的高级编程中的所有例子都指定了写入pipe道时的数据长度,或者依赖于fgets()stdio.h函数。 由于我关心速度,我想尽可能远离使用stdio.h。 这将有必要共享内存更快? 谢谢,德鲁夫