Articles of pipe理员

从共享内存段中读取和写入信号的地方在哪里?

我已经实现了一个基于共享内存模拟pipe()系统调用的库。 现在,当我没有使用任何fork() ,例如没有调用任何subprocess时,代码工作正常。 我的库需要与任何给定的 int main()程序一起工作,所以这里的基本问题是用信号量进行的修改应该在库中进行,而不是在主程序中进行。 图书馆 : 这是图书馆: static int flag = FALSE; static int mutex_init = 0; static pthread_mutex_t lock; #define BUFFER 4096 int my_new_finish() { return 1; // always successful } void error_out(const char *msg) { perror(msg); exit(EXIT_FAILURE); } 现在,当我不使用调用fork() main时,这个库工作正常。 但是,当我使用fork() ,所有地狱刹车松动。 例如 : #include <stdio.h> #include <stdlib.h> int main() { […]

全局或本地线性地址空间在Linux?

在linux中,因为段的基数都是0,所以逻辑地址与线性地址(Book“Understanding the linux kernel”)一致。 我觉得不同进程的逻辑地址可能是一样的,所以不同进程的线性地址可能是一样的,每个进程视图4GB,每个进程都会有自己的线性地址空间(本地地址空间)。 但也有一些文章说,所有进程共享一个很大的线性地址空间,并且使用段机制把不同的进程映射到线性地址空间的不同部分。 听起来像是一个全局线性地址空间,具有更宽的地址位。 我错在哪里? 或者他们在不同的架构中使用?

为什么Linux中的物理内存被分配线性增加而不是一次?

我写了一个如下的程序,一次分配了大约1.2G的内存,我在Linux上testing过。 然后我发现 如果我定义了macros* WRITE_MEM *,则物理内存使用率(由命令顶部检查)将线性增加。 如果我没有定义这个macros,那么物理内存的使用量非常小(大约几百KB),而且不会变大。 我不明白这个现象。 #include <iostream> #include <cmath> #include <cstdlib> using namespace std; float sum = 0.; int main (int argc, char** argv) { float* pf = (float*) malloc(1024*1024*300*4); float* p = pf; for (int i = 0; i < 300; i++) { cout << i << "…" << endl; float* qf […]

pipe道到unistd.h阅读段错误

即时尝试pipe道读取,但它保持在第二次input后segfaulting。 我究竟做错了什么? 提前致谢。 $ ./read < <(python -c 'print "BBA\nBBADD\n",') Please enter your first name: buf= BBA BBA Please enter your last name: buf= Segmentation fault (core dumped) 我附上阅读的代码作为参考,重要的部分是read() //read.c #include <stdio.h> #include <string.h> void prompt_name(char *name, char *msg){ char buf[4096]; puts(msg); read(0, buf, sizeof buf); puts("buf="); puts(buf); *strchr(buf, '\n') = 0; puts(buf); strncpy(name, buf, […]

pipe道打开“|”之间的区别 和'| – '(安全pipe道打开)

我已经看到这两种forms的pipe道在Perl中open 。 一个是简单的pipe道打开 open FH,'| command'; 和其他是安全的pipe道打开 open FH,'|-','command'; 现在有什么用-在第二个? 他们都写信给pipe道。 我知道-叉新的过程。 简单| 也创造新的过程? 我们何时/应该使用安全pipe道打开|- ?

Linux软件包在哪里下载完整的依赖列表

我在哪里可以find大多数stream行Linux软件包的所有依赖项(直接和传递依赖项)的列表? 我想要一个完整的列表(只是列表)以依赖关系图的forms进行探索。 是否有可下载的列表,列出大多数stream行的Linux软件包的所有依赖关系? 有一些脱机DVD的安装(如Debian / Ubuntu等)。 是否有任何工具可以提取这些DVD中给定软件包的依赖信息? 我已经看到下面的问题,但这不是我想要的。 如何在Linux上列出软件包的所有依赖关系? 日Thnx

当linux中的硬盘已满时,fwrite不会返回0为什么?

当硬盘100%满时,fwrite(比如说1000字节)返回0 [Fail,如预期的那样],但当硬盘空间很小时,比如600Byte,那么fwrite(1000字节)不会返回0 [fail],而是返回300字节,再次调用fwrite仍然返回300bytes,fwrite永远不会失败,即使我们调用100次? 错误号是正确设置为28.我的问题是为什么fwrite的行为? 这是正确的吗? 如果fwrite返回小于我们要写的字节,那么这意味着磁盘已满? 并build议处理这种情况?

为什么更多的命令不能读取标准input但从pipe道input呢?

我有more命令怀疑。 通常情况下, more不能从stdin读取,但使用pipe道从标准input读取内容。 例如,当试图执行more命令来从stdin获取input时,它正在拒绝。 $ more [Enter] Usage: more [options] file… Options: -d display help instead of ring bell -f count logical, rather than screen lines -l suppress pause after form feed -p suppress scroll, clean screen and disblay text -c suppress scroll, display text and clean line ends -u suppress underlining -s squeeze multiple […]

如何在基于Linux的embedded式设备上导致内存碎片?

我在做什么:答:我正在尝试在基于Linux 2.6.31的无embedded式设备上创build内存碎片。 为什么:答:我正在尝试将一些修补程序移植到Linux 2.6.31,以便对碎片内存进行碎片整理。 为了testing这些补丁是否正常工作,我想尝试先分割内存。 我了解到,通过应用程序连续分配和释放内存可能导致碎片化。 所以我写了这些简单的C程序。 #include <stdio.h> #include <stdlib.h> int main(void) { srand(time(NULL)); int i = 0, j = 0, randnum=0; while(1) { randnum = rand()%10000000; double *ptr = (double*) malloc(sizeof(*ptr) * randnum); for(j = 0 ; j < randnum; j++) { *(ptr+j) = (double)j+1; } free(ptr); } } ========== #include <stdio.h> #include […]

如何在基于Linux的Web服务器上安装wkhtmltopdf 0.12.0和更高版本?

wkhtmltopdf 0.11.0 和更早版本安装简单地复制Linux静态二进制文件到Web服务器,如这里https://stackoverflow.com/a/3116571/2464199 并通过PHP命令来运行它 exec('/path/to/wkhtmltopdf-amd64 file.html file.php'); 在较新的版本wkhtmltopdf(0.12.0 和更高版本 ) 没有静态的二进制文件。 如何在没有root权限的情况下在共享主机帐户上安装它? Web服务器上的OS: Linux multidomain1.hostsila.com 2.6.18-274.el5#1 SMP Fri Jul 22 04:43:29 EDT 2011 x86_64 x86_64 x86_64 GNU / Linux Linux版本2.6.18-274.el5(mockbuild@builder10.centos.org)(gcc版本4.1.2 20080704(Red Hat 4.1.2-50))#1 SMP Fri Jul 22 04:43:29 EDT 2011 CentOS版本5.10(最终版)