Articles of pipe理员

如何列出连接到Linux共享内存段的进程?

如何确定哪个进程连接到共享内存段? awagner@tree:/home/awagner$ ipcs -m —— Shared Memory Segments ——– key shmid owner perms bytes nattch status 0x00000000 0 root 777 102400 1 0x00000000 32769 root 774 96 1 dest 0x00000000 98306 awagner 600 393216 2 dest 0x00000000 131075 awagner 600 393216 2 dest 即我如何确定哪两个进程连接到shmid 98306?

何时使用pipe道与何时使用共享内存

我正在阅读各种IPC机制。 我试图找出场景,我们使用共享内存和我们使用命名pipe道(FIFO)的地方。 pipe道:多个进程可以写入,但只有一个进程可以读取。 写操作是primefaces的。 共享内存:多个进程可以读写。 而且用户需要提供互斥的读写。 这是共享内存和pipe道的唯一区别吗?

基于Linux的程序

为这个写一个程序>>>>>> 一个程序将打开一个pipe道,写一个数字给pipe道。 其他程序将打开相同的pipe道,将读取数量并打印它们。 closures这两个pipe道。 我怎么能写一个基于这个任何一个知道的程序,然后请帮助我… !!!!

Linux上ru_maxrss的单位是什么?

这是来自man getrusage struct rusage { struct timeval ru_utime; /* user time used */ struct timeval ru_stime; /* system time used */ long ru_maxrss; /* maximum resident set size */ long ru_ixrss; /* integral shared memory size */ long ru_idrss; /* integral unshared data size */ long ru_isrss; /* integral unshared stack size */ long ru_minflt; […]

为什么malloc依赖于从某个阈值开始的mmap?

我正在读一些关于malloc的信息,并在malloc的手册页中find了以下内容: 通常,malloc()从堆中分配内存,并根据需要使用sbrk(2)调整堆的大小。 当分配大于MMAP_THRESHOLD字节的内存块时,glibc malloc()实现使用mmap(2)将内存分配为专用匿名映射。 MMAP_THRESHOLD默认为128 kB,但可以使用mallopt(3)进行调整。 使用mmap(2)执行的分配不受RLIMIT_DATA资源限制的影响(请参阅getrlimit(2))。 所以基本上从阈值MMAP_THRESHOLD malloc开始使用mmap开始。 有没有任何理由切换到大块的mmap? 这可能会影响stream程执行的性能吗? mmap系统调用是否强制上下文切换?

哪些片段受到写入时拷贝的影响?

我对“ 写时复制 ”的理解是:“每个人在写入之前都有一个相同数据的共享副本,然后进行复制”。 是由堆和bss段组成的相同数据的共享副本还是仅堆? 哪些内存段将被共享,这是依赖于操作系统?

如何在写入之前检查pipe道是否打开?

如果我写封闭的pipe道消息,然后我的程序崩溃 if (write(pipe, msg, strlen(msg)) == -1) { printf("Error occured when trying to write to the pipe\n"); } 如何在写入之前检查pipe是否仍然打开?

在c中实现stream水线 什么是最好的方法来做到这一点? (自己的linuxshell)

我想不出有什么办法可以在c中实现stream水线操作。 这就是为什么我决定写在这里。 我不得不说,我明白了pipe / fork / mkfifo是如何工作的。 我已经看到了很多实现2-3个pipe道的例子。 这很容易。 我的问题开始,当我要实现壳,pipe道数不明。 我现在得到了什么:例如。 ls -al | tr az AZ | tr AZ az | tr az AZ 我把这样的线路变成这样的东西: array[0] = {"ls", "-al", NULL"} array[1] = {"tr", "az", "AZ", NULL"} array[2] = {"tr", "AZ", "az", NULL"} array[3] = {"tr", "az", "AZ", NULL"} 所以我可以使用 execvp(array[0],array) 稍后的。 现在,我相信一切都好。 问题开始,当我试图将这些函数的input/输出redirect到彼此。 以下是我如何做到这一点: […]

获取进程段C / C ++的开始和结束

我需要得到以下过程段的开始和结束地址:代码,数据,堆栈,环境。 我明白它是如何在内存中,但不知道如何使用API​​调用或其他东西。 我已经find了如何使用这段代码开始一些细分市场 #include <stdio.h> int temp_data = 100; static int temp_bss; void print_addr ( void ) { int local_var = 100; int *code_segment_address = ( int* ) &print_addr; int *data_segment_address = &temp_data; int *bss_address = &temp_bss; int *stack_segment_address = &local_var; printf ( "\nAddress of various segments:" ); printf ( "\n\tCode Segment : %p" , […]

Xlib这是如何(删除窗口装饰)工作?

以下代码如何删除窗口边框? //note the struct is declared elsewhere, is here just for clarity. //code is from [http://tonyobryan.com/index.php?article=9][1] typedef struct Hints { unsigned long flags; unsigned long functions; unsigned long decorations; long inputMode; unsigned long status; } Hints; //code to remove decoration Hints hints; Atom property; hints.flags = 2; hints.decorations = 0; property = XInternAtom(display, "_MOTIF_WM_HINTS", true); […]