Articles of pipe理员

如何在写入之前检查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); […]

当操作系统杀死你的进程时返回代码

我想testing如果使用多进程,我可以在32位操作系统上使用超过4GB的内存(我的是:1GB内存的Ubuntu)。 所以我写了一个malloc稍小于1GB的小程序,并对该数组执行一些操作,并运行该程序的5个实例。 事情是,我怀疑操作系统杀死了其中的4个,只有一个幸存下来,并显示它是“PID:我已经完成”)。 (我已经尝试了小数组,并得到5印刷,当我看着与TOP运行的进程,我只看到一个实例..) 奇怪的是这个 – 我收到了所有实例的返回代码0(成功?),包括据说被OS 我没有得到任何按摩说明进程被杀害。 这个返回代码是否正常? (如果是这样,这减less了我对'返回代码'的信任…) 谢谢。 编辑:一些答案build议在小程序可能的错误,所以在这里。 分支和保存返回码的较大的程序是较大的,我在这里有麻烦,但我认为(并希望)没有问题。 我也注意到,如果不是用我的分叉程序来运行它,我使用'.a.out&./a.out&./a.out&./a.out&'来运行terminal。 ./a.out是附带的小程序的二进制文件)我看到一些“Killed”消息。 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #define SMALL_SIZE 10000 #define BIG_SIZE 1000000000 #define SIZE BIG_SIZE #define REAPETS 1 int main() { pid_t my_pid = getpid(); char * x = malloc(SIZE*sizeof(char)); if (x == NULL) { printf("Malloc failed!"); return(EXIT_FAILURE); […]

PhantomJS:pipe道input

我正在尝试使用PhantomJS来呈现一个HTML页面到PDF。 我不想将文件写入磁盘,我有内存中的HTML,我想在内存中的PDF。 在这个问题上使用Pooria Azimi的出色答案,我可以从命名pipe道获得pdf。 当在另一端尝试相同的时候(用命名pipe道replaceinput文件),我最终得到一个空白的pdf。 这就是我现在正在做的(简化): mkfifo in_pipe.html out_pipe.pdf ./phantomjs rasterize.js in_pipe.html out_pipe.pdf 然后在另一个terminal: echo '<center>hey!</center>' > in_pipe.html cat out_pipe.pdf > out.pdf 文件out.pdf被创build,但是是空的。 我错过了什么吗?

有没有可能在Linux上更改命名pipe道的大小?

我知道,对于当前版本的Linux内核,命名pipe道的大小是64K。 有没有可能增加这个大小呢? 我知道我可以切换到套接字,但首先我想看看是否可以通过增加命名pipe道大小来解决间歇性缓冲区溢出问题。

你怎么能find一个线程正在运行的处理器号码?

我有一个内存堆pipe理器,它根据系统上的处理器数量将堆分成不同的段。 内存只能分配到当前正在运行的线程处理器的分区。 这将有助于允许不同的处理器继续运行,即使两个不同的处理器要同时分配内存,至less我相信。 我发现了Windows的函数GetCurrentProcessorNumber(),但是这只适用于Windows Vista和更高版本。 有没有一种方法可以在Windows XP上运行? 另外,这可以通过POSIX系统上的pthread来完成吗?

什么条件导致一个打开的,无阻塞的命名pipe道(fifo)不可读取?

情况: new_pipe = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) # pipe_path points to a FIFO data = os.read(new_pipe, 1024) 读取偶尔会引起errno -11:资源暂时不可用。 什么时候提出这个错误? 这似乎是非常罕见的,因为常见的情况下返回数据: 如果没有编写者打开pipe道,则返回空str('')。 如果作者打开了pipe道,但没有数据在FIFO中,则返回空str('') 当然,如果作者将数据放在fifo中,那么这些数据将被读取。

将stdout作为命令行util的文件名?

我正在使用一个命令行实用程序,它需要传递一个文件的名称来写输出,例如 foo -o output.txt 它写入stdout的唯一信息是表示它已成功运行。 我希望能够将所有写入到output.txt所有内容都pipe理到另一个命令行实用程序。 我的动机是output.txt最终将成为一个40 GB的文件,我不需要保留,而且我宁愿pipestream而不是逐步处理大量文件。 在这种情况下有没有办法将实际输出(即output.txt )pipe道到另一个命令? 我可以以奇迹般的方式将stdout作为文件参数吗?