Articles of pipe理员

在Java中创build命名pipe道

我正在尝试使用Java创build命名pipe道。 我正在使用Linux。 但是,我遇到了写入pipe道的问题。 File fifo = fifoCreator.createFifoPipe("fifo"); String[] command = new String[] {"cat", fifo.getAbsolutePath()}; process = Runtime.getRuntime().exec(command); FileWriter fw = new FileWriter(fifo.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(boxString); //hangs here bw.close(); process.waitFor(); fifoCreator.removeFifoPipe(fifo.toString()); fifoCreator: @Override public File createFifoPipe(String fifoName) throws IOException, InterruptedException { Path fifoPath = propertiesManager.getTmpFilePath(fifoName); Process process = null; String[] command = new […]

Valgrind之外的任何工具来监视Linux中正在运行的进程的内存使用情况?

这个问题的答案说,没有办法将Valgrind附加到已经运行的进程中。 有没有其他Linux工具可以报告内存使用情况,但可以附加到已经运行的进程?

如何debugging一个奇怪的内存泄漏(C ++)

我正在写一个linux恶魔,现在它工作得很好,但它泄漏了内存(这很糟糕 – 几个小时后,它使用了60%的系统内存段错误)。 奇怪的是,我只使用新的/删除操作符,并在主函数周围有一个try / catch块,所以它不是一个新的抛出exception – 它只是由于缺乏内存的段错误。 我使用valgrind,但它只发现了一次性小泄漏,没有别的。 我也试过gdb,但是这个应用程序是用-g -rdynamic标志编译的,它不会把所有的地址转换成函数名。 你能告诉我一些更好的内存debugging方法,可以用来确定泄漏的来源吗?

linux机制来测量进程内存消耗f

什么是最有效和准确的方式/ API来测量从同一个正在运行的进程编程的堆内存消耗? 我想估计(尽可能准确地)自启动以来已经有多lessnew内存或malloc ,减去已经free或delete的内存 问题的范围是Linux和其他可能的Linux环境。 该语言是C或C ++ 编辑这是足够的,我的目的是知道分配/保留块的实际数量(和大小)由任何malloc实现,我不需要实际的malloc内存减去释放的内存

如何防止在Linux中从PIPE的读端读取垃圾

我用pipe道和叉子写了一个小代码。 subprocess调用写入pipe道的子function。 父进程调用从pipe道读取的父函数。 当fork()之后的程序的第一次调用转到父函数时,问题就出现了。 这里写入结束。 现在的问题是,读取调用读取一些垃圾到buf和nread是给值> 0。 这怎么能被阻止。 使用Linux 2.6.32-30-generic和gcc 4.4.3。 以下是代码:: #include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #define MSGSIZE 16 void parent(int* p); void child(int* p); char* msg1 = "hello"; char* msg2 = "bye"; int main() { int pfd[2]; if(pipe(pfd) == -1) { printf("Unable to create pipe\n"); exit(1); } fcntl(pfd[0],F_SETFL,O_NDELAY); […]

在多台计算机上共享内存?

我想分享多个计算机周围的某些内存区域,即C / C ++项目。 当计算机B上的某些内容访问当前在计算机A上的某个内存区域时,必须将其locking在A上并发送给B.当它唯一的linux可以编译时,我很好。 先谢谢了

将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中

我正在开发一个项目,在Linux平台上加载和运行一个自定义的二进制格式可执行文件(在我的情况下是PE)。 到目前为止,我已经成功完成了这个工作,首先加载可执行文件,然后加载一个小的ELF共享库,调用可执行文件的开始地址,然后安全地退出。 尽pipe如此,我真的不想自己做ELF加载。 首先,我使用的共享库是用汇编语言编写的(我不能使用任何其他的东西,因为我没有链接到libc等),这将是非常特定于平台的,我想远离并使用C,所以我可以编译任何平台。 而且,使用Linux的本地ELF加载器,而不是我自己的简化版本,会更容易和更安全。 我想知道是否有办法使用我的binfmt处理程序(一个已安装的内核模块)加载我的可执行文件, 然后让Linux将我的共享库(及其依赖项)加载到相同的地址空间中,而不会覆盖我的可执行代码。 我首先想到uselib系统调用可能是有用的,但手册页上的描述不清楚这是否符合我的目的: 从libc 4.4.4只加载库“/lib/ld.so”被加载,以便这个dynamic库可以加载剩余的库(再次使用这个调用)。 这也是libc5中的事态。 glibc2不使用这个调用。 我也从来没有见过它的使用的例子,我总是警惕使用我不明白的系统调用。 有没有一个很好的方法来实现我所描述的? 我可以使用Linux的现有function将共享库(用C语言编写)加载到已经包含可执行代码的地址空间中,如果可以的话,如何在不知道加载的地方使用该库?

什么尖端的桌面环境在那里?

Gnome,KDE,Fluxbox,IceWM,XFce等等。这些都是桌面环境/窗口pipe理器,已经有很长一段时间了。 我很想知道那里的一些“尖端”桌面环境/窗口pipe理器。 那些可能会以有用的方式使用3D。 或者使用其他forms的input,如触摸屏,多个鼠标或语音。 那里有什么尖端的桌面环境?

有没有办法build立一个Linuxpipe道非缓冲或线路缓冲?

我的程序正在控制Linux上的外部应用程序,通过pipe道将input命令传递到外部应用程序stdin,并通过外部应用程序stdout的pipe道读取输出结果。 问题是,写入pipe道是由块缓冲,而不是线路,因此延迟发生在我的应用程序接收外部应用程序输出的数据之前。 外部应用程序不能被改变来添加显式的fflush()调用。 当我将外部应用程序设置为/ bin / cat -n (它回显input,添加了行号)时,它可以正常工作,看起来cat在每行之后刷新。 强制外部应用程序刷新的唯一方法是发送退出命令; 当它接收到命令时,它会刷新,所有的答案出现在标准输出中,就在退出之前。 我非常确定,Unixpipe道是适合这种进程间通信(伪服务器 – 客户端)的解决scheme,但也许我错了。 (我刚刚从类似的问题中复制了一些文本: 使用Python强制另一个程序的标准输出为无缓冲 )

* nix中等效的win API

我正在寻找以下WinAPI的等效方法(在FreeBSD和Linux中): 的CreateFile(); 或OpenFile(); 的CreateFileMapping(); MapViewOfFile();