Articles of pipe理员

获取两个文件描述符而不使用pipe()

我想了解命令pipe(2) ,例如: int pipefd[2]; if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } 我想获得两个shared memory的文件描述符,匿名pipe道(父子关系)。 例如,这是父子之间的一个简单的谈话过程: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #define SHMSIZE 16 int main() { int shmid; char *shm; if(fork() == 0) // child first { shmid = shmget(2009, SHMSIZE, 0); shm = shmat(shmid, 0, […]

有可能将内核消息从特定的进程pipe道到文件

由于这是一个Linux的问题,我会注意到我正在使用OpenSUSE 12.1 我正在运行一个内核模块,基本上它是一个CAN总线模拟器,只要有“总线”活动,它就通过printk()打印消息。 我正在使用sudo cat /proc/kmsg跟踪消息,但是当我开始在“总线”上放置其他“设备”时,kmsgstream量受到极大的影响,很难find我的消息。 无论如何,将“printk”消息从一个特定的过程传输到一个文件? 编辑我现在看到有可能性,如果我添加特定的标签到我的debugging消息,有没有其他的方式?

使用多个pipe道从Python执行Shell脚本

我想在python脚本中执行下面的shell命令: dom=myserver cat /etc/xen/$myserver.cfg | grep limited | cut -d= -f2 | tr -d \" 我有这个: dom = myserver limit = subprocess.call(["cat /etc/xen/%s.cfg | grep limited | cut -d= -f2", str(dom)]) subprocess.call(['/root/bin/xen-limit', str(dom), str(limit)]) 这不起作用,但我不知道为什么.. 更新: c1 = ['cat /etc/xen/%s.cfg'] p1 = subprocess.Popen(c1, stdout=subprocess.PIPE) c2 = ['grep limited'] p2 = subprocess.Popen(c2, stdin=p1.stdout, stdout=subprocess.PIPE) c3 = […]

在您自己的服务器上托pipe一个网站

有一个详细的指南,解释如何在Linux上的自己的服务器上托pipe一个网站。 我目前已经将其托pipe在一个商业网站上。 该域名也被注册到不同的供应商。 谢谢

Linux Cdebugging库检测内存损坏

有时候在一个简单MMU的embedded式系统上工作时,我曾经dynamic地编程这个MMU来检测内存损坏。 例如,在运行时的某个时候,foovariables被一些意外的数据覆盖(可能是一个悬挂的指针或其他)。 所以我添加了额外的debugging代码: 在初始化时,foo使用的内存被指示为MMU的禁止区域; 每一次foo被故意访问,刚才在那个时候禁止进入该地区; 添加了一个MMU irq处理程序来转储主机和负责违规的地址。 这实际上是某种观察点,但直接由代码本身自己处理。 现在,我想重复使用相同的技巧,但在x86平台上。 问题在于,我很难理解MMU在这个平台上的工作方式,以及它如何被Linux使用,但是我想知道是否已经存在任何库/工具/系统调用来处理这个问题。 请注意,我知道存在各种类似Valgrind或GDB的工具来pipe理内存问题,但据我所知,这些工具中没有一个是由debugging代码dynamic重新configuration的。 我主要对Linux下的用户空间感兴趣,但是对于内核模式或者Windows下的任何信息也是很欢迎的!

扩展大型本地数据处理的堆栈大小是一个好主意吗?

我的环境是gcc,C ++,Linux。 当我的应用程序进行一些数据计算时,可能需要一个“大”(可能是几MB)的内存数来存储数据,计算结果和其他东西。 我使用了一些新的代码, 删除来完成这个。 由于在某个函数范围之外没有所有权,我认为所有这些内存都可以分配到堆栈中。 问题是,默认的堆栈大小(我的系统中的8192Kb)可能不够。 我可能需要更改这些堆栈分配的堆栈大小。 而且,如果将来计算需要更多数据,我可能需要再次扩展堆栈大小。 那么是否可以扩展堆栈大小呢? 由于不能分配给特定的function,它将如何影响整个应用程序? 在堆栈而不是在堆上分配数据真的是一个改进吗?

在父子之间发送信息 – 为什么没有死锁?

鉴于此代码: #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(void) { int fd[2], nbytes; pid_t childpid; char string[] = "Hello, world! I'm the son and this my message!\n"; char readbuffer[80]; pipe(fd); // piping fd[0] & fd[1] if((childpid = fork()) == -1) // here we create a SON process { perror("fork"); exit(1); } if(childpid == 0) // […]

一次使用函数 – 我应该使用malloc或不

我有一点点长的C代码,有一个函数只会被调用一次。 这包括一些像char array , int这样的variables。 代码是这样的: void onetimefcn(){ char example_array1[20]="hello…"; //… char example_array10[14]="hej…"; int x=3,y=432,z=321,d=4439; //some arithmatic operation //some char array operation: strcpy, strcmp // some for loops and if else conditions } 我将在embedded式Linux设备上运行该代码。 我想知道如果我应该使用malloc的所有variables在那个function,然后free它们? 会有助于有效利用资源,否则会出现一些严重的问题(如果是这样的话,会发生什么)?

如何获得文件的文件的绝对path,每当一个新的文件在Linux中创buildinode?

我用我的linux操作系统(CentOS)做了一些实验,我想跟踪在相同的环境下创build的所有工具日志,工具生成相应的日志(.log extn)用于跟踪这些更改我写了一个实际监视目录我设置,当新文件创build时,它会显示在输出,但这消耗了大量的内存和CPU利用率,因为我已经设置2秒作为hibernate期。 我的问题“有没有更好的办法呢?” 我想过使用inode表来跟踪系统中的所有更改。 这能解决我的问题吗? 如果是的话,请让我们知道解决scheme相同?

如何build立延迟/缓冲pipe道?

是否有可能build立一个缓冲pipe道保留数据(对于一些给定的字节数量或一些给定的时间)从标准的Linux工具,如猫,DD等? 例如收集一定数量的数据包,audio数据或其他东西。 例如。 build立一个脚本delaybuffer来做这样的事情: arecord | delaybuffer 16000 | aplay 播放延迟录制的audio16000字节。