Articles of pipe理员

在mono / Linux下从命名pipe道读/写

我想从Linux下的命名pipe道/ FIFo队列中读/写。 我已经尝试了System.IO中的标准类StreamWriter和其他类,但是因为使用了seek而失败了。 有没有人使用Mono写入/读取命名pipe道? 我正在努力阅读和写作 – 但不是同一时间…

Linux是否提供低于堆栈底端的保证无法访问的内存区域?

Linux是否提供低于低端堆栈端的无法访问的内存区域,并具有保证的最小大小? 如果这种保证的最小尺寸存在,那是什么? 或换句话说,我什么时候该开始担心alloca()或者让我指向有效的非堆栈内存?

malloc像使用自定义堆的函数

如果我想用自定义的预分配堆构buildmalloc类似的function,C中最好的方法是什么? 我的具体问题是,我有一个已经被放置到我的地址空间的mmap-able(类似于内存)的设备,但是我需要获得一个更灵活的方式来使用这个内存来存储将被分配和释放的对象。 我知道malloc,free和其他类似的函数是用来在堆上执行这种分配的,但是有什么办法可以使用这种函数提供的逻辑来实现它的dynamic行为,同时提供我自己的地址空间来操作有问题的堆?

在Linux中以编程方式设置自定义文件夹/目录图标

在Linux中,是否可以为桌面/文件pipe理器中显示的文件夹/目录设置自定义图标? 例如,对于Windows资源pipe理器,可以在文件夹的desktop.ini文件中设置自定义图标? 如果是这样,是否有一个共同的机制或API函数来做到这一点(这可能在发行版/桌面/文件pipe理器中很常见)? 我想从一个独立的控制台模式程序C ++或者可能使用桌面API的KDE,GNOME等。(也是Unix CDE和OSX)

如果一个孩子的过程在阅读的时候不会从写作中结束,会发生什么?

给出以下代码: int main(int argc, char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ […]

最后一个分叉的孩子不会死

我有两个主要的过程分叉,从而创造两个孩子。 这两个孩子是这样互相配pipe的: ls | more 现在的问题是,第二个孩子永远不会死亡。 这是为什么? 什么时候pipe道中的最后一个孩子真的死了? 除去一个wait()调用显示ls | more的预期结果 ls | more但给出了一些更奇怪的行为(卡住terminal等)。 这是我的代码: int main(){ printf("[%d] main\n", getpid()); int pip[2], i; pipe(pip); /* CHILDREN*/ for (i=0; i<2; i++){ if (fork()==0){ /* First child */ if (i==0){ printf("[%d] child1\n", getpid()); close(1); dup(pip[1]); close(pip[0]); execlp("ls", "ls", NULL);} /* Second child */ if (i==1){ printf("[%d] child2\n", […]

Python和FIFO

我试图了解在Linux下使用Python的FIFO,我发现了一个奇怪的行为,我不明白。 以下是fifoserver.py import sys import time def readline(f): s = f.readline() while s == "": time.sleep(0.0001) s = f.readline() return s while True: f = open(sys.argv[1], "r") x = float(readline(f)) g = open(sys.argv[2], "w") g.write(str(x**2) + "\n") g.close() f.close() sys.stdout.write("Processed " + repr(x) + "\n") 这是fifoclient.py import sys import time def readline(f): s = f.readline() […]

如何使用Linux的splice()函数将文件复制到另一个文件?

这里是关于splice()的另一个问题。 我希望使用它来复制文件,并试图使用拼接的维基百科页面上的例子一样的pipe道连接的两个拼接调用。 我写了一个简单的testing用例,它只尝试从一个文件读取第一个32K字节,并将它们写入另一个文件: #define _GNU_SOURCE #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> int main(int argc, char **argv) { int pipefd[2]; int result; FILE *in_file; FILE *out_file; result = pipe(pipefd); in_file = fopen(argv[1], "rb"); out_file = fopen(argv[2], "wb"); result = splice(fileno(in_file), 0, pipefd[1], NULL, 32768, SPLICE_F_MORE | SPLICE_F_MOVE); printf("%d\n", result); result = splice(pipefd[0], […]

python Pipes的同步/asynchronous行为

在我的应用程序中,我使用多处理模块中的pipe道在python进程之间进行通信。 最近我观察到一个奇怪的行为取决于我通过他们发送的数据的大小。 根据python文档,这些pipe道是基于连接的,并且应该以asynchronous的方式运行,但是有时他们在发送时会卡住。 如果我在每个连接中启用全双工,一切工作正常,即使我没有使用连接发送和收听。 任何人都可以解释此行为? 100浮点数,全双工禁用 代码工作,利用asynchronous。 100个浮点,全双工启用 该示例正常工作正常。 10000浮点数,全双工禁用 尽pipe数据较小,但执行被永久封锁。 10000浮点,全双工启用 再次罚款。 代码(这不是我的生产代码,它只是说明了我的意思): from collections import deque from multiprocessing import Process, Pipe from numpy.random import randn from os import getpid PROC_NR = 4 DATA_POINTS = 100 # DATA_POINTS = 10000 def arg_passer(pipe_in, pipe_out, list_): my_pid = getpid() print "{}: Before send".format(my_pid) pipe_out.send(list_) print "{}: […]

无法连接到远程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 […]