Tag: 管道

用select()从管道读取信号

使用带管道的select() – 这就是我正在做的事情,现在我需要抓住SIGTERM 。 我该怎么做? 当select()返回错误(<0)时,我是否必须这样做?

如何等待数据写入管道的另一端

我正在用C开发一个应用程序。父子进程通过管道进行通信。 在写入管道之前,父进程执行另一个语句。 在示例代码中,我使用sleep(10)来延迟。 在子进程中,它应该从管道中读取数据。 但是在子进程的管道读取端没有读取数据。 int main() { int pid; FILE *fp; fp = fopen(“test.txt”,”w”); char *buff; int fd[2]; int count = 0 ; pipe(fd); pid = fork(); if(pid == 0) { close(fd[1]); ioctl(fd[0], FIONREAD, &count); fprintf(fp,”Value of count: %d “,count); buff = malloc(count); fprintf(fp,”\n TIME before read: %s”,__TIME__); read(fd[0], buff, count); fprintf(fp,”\nbuffer: %s\n TIME […]

如何将一个子进程中的stdout链接到C中另一个子进程中的stdin?

我一直在乱搞C试图弄清楚如何做到这一点。 假设我有我的主程序,即父进程。 父级创建了三个子进程,每个进程最终将运行程序(但现在这并不重要)。 我想做的就是让第二个孩子的stdin接收第一个孩子的stdout。 然后第三个孩子的标准输出将接收第二个孩子的标准输出。 父进程的stdin / stdout根本没有搞乱。 到目前为止,我得到的是 pipe(procpipe); parentPid = getpid(); for(i = 0; i < 3; i++) { if(getpid() == parentPid) { child[i] = fork(); if(child[i] == 0) { mynumber = i+1; } } } 但是从那里开始,我有点担心如何使用dup2来正确分配我的管道,以及在我的代码的哪一部分插入它。 谷歌和这个网站上有很多关于如何从父母到孩子的管道的例子,但是我还没有看到一个会告诉我如何将孩子的标准输出连接到另一个孩子的标准输入的确切信息。 编辑:忘记提及:假设我的所有变量都已正确初始化。 int’mynumber’是这样的子进程在创建时知道它是哪个数字,所以我可以通过它给出指令 if(mynumber == whatever)

子进程之间的UNIX管道

我正在尝试编写一个程序,它将生成任意数量的子进程并在它们之间进行管道传输,类似于命令行管道。 在我的情况下,我正在尝试“ls -l | more”并将其输出到stdout,然后让父级继续执行更多命令。 我将以下代码作为最小示例: int main (int argc, const char * argv[]) { int fd[2]; pipe(fd); chdir(“/directory/with/lots/of/files”); // Create one child process for more int pid = fork(); if (pid == 0) { close(fd[1]); int ret = dup2(fd[0],0); if (ret < 0) perror("dup2"); char *argv[10]; argv[0] = "more"; argv[1] = NULL; execvp("more", argv); […]

使用带有指向stdin的文件指针的fseek

根据命令行参数,我设置一个文件指针指向指定的文件或stdin(用于管道)。 然后我将这个指针传递给许多不同的函数来从文件中读取。 这是获取文件指针的函数: FILE *getFile(int argc, char *argv[]) { FILE *myFile = NULL; if (argc == 2) { myFile = fopen(argv[1], “r”); if (myFile == NULL) fprintf(stderr, “File \”%s\” not found\n”, argv[1]); } else myFile = stdin; return myFile; } 当它指向stdin时, fseek似乎不起作用。 通过这个,我的意思是我使用它,然后使用fgetc ,我得到了意想不到的结果。 这是预期的行为吗?如果是,我该如何移动到流中的不同位置? 例如: int main(int argc, char *argv[]) { FILE *myFile = […]

使C代码自动绘制图形

我编写了一个程序,将一个数据列表写入’.dat’文件,然后使用gnuplot单独绘制它。 有没有办法让我的代码自动绘制它? 我的输出forms如下: x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation …. 理想情况下,当我运行代码时,图形也会打印出x标签,y标签和标题(可以从我的C代码更改)。 非常感谢。