Articles of pipe理员

为什么常量存储在C内存映射的文本段中?

你好请考虑下面的代码片段,在Linux机器(64位)上用gcc编译,并带有相应的内存映射 #include <stdio.h> int global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1092 500 16 1608 648 mem 这里有一个全局variables初始化为2。 它被存储在数据段中考虑使其为const的情况,如下所示 #include <stdio.h> int const global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1096 […]

打开()时试图打开pipe道读取块

我有两个进程,一个服务器和一个客户端,应该通过pipe道(C ++,Linux)进行通信。 服务器用O_RDONLY标志打开pipe道,用O_WRONLY打开客户端。 然而,服务器在open函数中阻塞,而客户端似乎成功运行( open函数返回成功, write函数也是如此)。 我已经读过,如果O_NONBLOCK标志被设置,读取function将继续,但我不希望它继续,如果没有客户端连接 – 可以阻止, 直到客户端连接 ,但在我的情况下,它仍然阻止即使客户端运行完成后 你能否告诉我我做错了什么? 这里是代码: // Server side int pipe; int status, nr_read = 0; status = mkfifo(FIFO_NAME, 0666); if (status < 0) { // If the file already exists, delete it unlink(FIFO_NAME); // Try again status = mkfifo(FIFO_NAME, 0666); if(status < 0) { printf("mkfifo error: %d\n", […]

smap中的“Private_Dirty”记忆是什么意思?

我有一个巨大的内存消耗Java过程,我正试图弄清楚他正在做什么,所有这些内存。 所以,我正在对这个PID做一个pmap -x,这是一个结果: Address Kbytes RSS Dirty Mode Mapping 0000000000001000 4 0 0 rw— [ anon ] 0000000000400000 48 0 0 rx– java 000000000050b000 4 4 4 rw— java 0000000003b9d000 264 224 212 rw— [ anon ] 0000000003bdf000 2199556 1887992 1830160 rw— [ anon ] 000000396c800000 112 108 0 rx– ld-2.5.so 000000396ca1c000 4 4 4 […]

在ICC中embeddedICC颜色configuration文件

我正在生成PDF,其中所有graphics都在sRGB色彩空间的\ DeviceRGB中绘制。 我想使用ICCconfiguration文件将PDF转换为不同的颜色configuration文件,并embeddedICCconfiguration文件,但我找不到一个好的工具来做到这一点。 我曾尝试ImageMagick,但是光栅化PDF是不受欢迎的,我尝试过使用Ghostscript。 但是,虽然这转换颜色,它不embeddedICCconfiguration文件。 有什么工具或库(最好Java或Scala)可用于Linux,做我想要的? 我试过的Ghostscript命令是: gs -o cmyk.pdf -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite \ -dOverrideICC=true -sOutputICCProfile=CoatedFOGRA27.icc \ -dRenderIntent=3 in.pdf 和 gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -ColorConversionStrategy=CMYK \ -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedFOGRA27.icc \ -sOutputFile=cmyk.pdf in.pdf 和以上的几个变化。 我已经尝试了Ghostscript版本9.10和9.16。

Linux / Windows中的C / C ++内存使用API

我想获得每个进程和系统范围的内存使用信息。 在Windows中,这很容易。 GetProcessMemoryInfo和GlobalMemoryStatusEx可以非常轻松地完成这些工作。 例如,GetProcessMemoryInfo给出给定进程的“PeakWorkingSetSize”。 GlobalMemoryStatusEx返回系统可用内存。 不过,我需要在Linux上完成。 我试图find相当于GetProcessMemoryInfo和GlobalMemoryStatusEx的Linux系统API。 我发现'getrusage'。 然而,struct rusage中的最大'ru_maxrss'(驻留集大小)仅为零,这不被执行。 另外,我不知道要获得全系统的空闲内存。 目前的解决方法,我使用的是“系统(”ps -p%my_pid -o vsz,rsz“);”。 手动logging到文件。 但是,处理数据很脏,不方便。 我想知道一些奇特的Linux API用于这个目的。

Linux:检查一个套接字/pipe道是否被破坏而不进行读取()/ write()

我有一段简单的代码将数据定期写入传递给它的fd。 FD最有可能是一个pipe道或套接字,但可能是任何东西。 由于我得到一个EPIPE错误(我忽略了SIGPIPE),所以当我写入()时,我可以检测到socket / pipe何时closures/中断。 但是我不会一直写信,所以很长一段时间可能无法检测到一个封闭的套接字。 我需要尽快对封闭做出反应。 有没有办法检查FD而不必做一个写()? 如果我没有写任何东西,我可以定期做这个。

再次在Unix中recursionpipe道

我知道这个话题已经有好几次了,但是我仍然坚持一点。 我需要编写一个模拟cmd1 | cmd2 | cmd3 …的程序 cmd1 | cmd2 | cmd3 … cmd1 | cmd2 | cmd3 …pipe道。 我的代码在这里: http : //ideone.com/fedrB8 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <stdlib.h> void pipeline( char * ar[], int pos, int in_fd); void error_exit(const char*); static int child = 0; /* whether it is a child process […]

页面错误陷阱的成本

我有一个应用程序定期(每1或2秒后)通过分叉自己的检查点。 所以检查点是原始进程的一个分支,它只是保持空闲,直到在原始进程中出现错误时要求启动。 现在我的问题是fork的copy-on-write机制是多么昂贵。 写入时复制机制将确保原始进程写入内存页面(在获得检查点之后的第一次)时,将发生的页面错误陷阱的成本是多less与检查点不同的物理页面。 在我看来,页面错误陷阱开销可能会相当高,因为中断发生时,我们从用户空间降落到内核空间,然后从内核回到用户空间。 我可以从这样的页面错误陷阱中损失多lessCPU周期。 假设RAM足够大,我们不需要交换到硬盘。 那么我知道,很难想象一个检查点计划比这更有效率,因此你可以说为什么我担心页面陷阱错误的开销,但我只是想知道这个计划将有多less成本。

有没有一种方法来提高Linuxpipe道的性能?

我试图使用64位CentOS 6pipe理从一个应用程序到另一个应用程序的极高速度的数据。我已经使用dd做了以下基准testing,发现pipe道阻碍了我,而不是我的程序中的algorithm。 我的目标是达到1.5 GB / s左右。 首先,没有pipe道: dd if=/dev/zero of=/dev/null bs=8M count=1000 1000+0 records in 1000+0 records out 8388608000 bytes (8.4 GB) copied, 0.41925 s, 20.0 GB/s 接下来,两个dd进程之间的pipe道: dd if=/dev/zero bs=8M count=1000 | dd of=/dev/null bs=8M 1000+0 records in 1000+0 records out 8388608000 bytes (8.4 GB) copied, 9.39205 s, 893 MB/s 我可以对内核做些什么调整吗?或者其他什么可以提高通过pipe道运行数据的性能? 我也尝试了命名pipe道,并得到了类似的结果。

为什么ulimit无法成功限制常驻记忆,以及如何?

我启动一个新的bash shell,并执行: ulimit -m 102400 ulimit -a " core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) 102400 open files (-n) 1024 pipe size (512 bytes, -p) 8 […]