Articles of pipe理员

你如何处理使用36位映射的IO?

我有一个APM86290(ppc)SOC的电路板。 这是我第一次进入这种types的开发,我试图与使用36位地址(根据数据表)映射的SPI控制器一起工作。 我想用mmap()和/dev/mem读取一些寄存器。 通常有统一的方法来解决这些高四位? 或者这可能是这个处理器/ 编译器特有的东西? 我现在正在试图这样做。 #define OFFSET 0xfa0000000 int main() { int i; unsigned int * someRegister; int fd = open("/dev/mem",O_RDWR|O_SYNC); if(fd < 0) { printf("Can't open /dev/mem\n"); return 1; } someRegister = (unsigned int *) mmap(0, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, OFFSET); if(someRegister <= NULL) { printf("Can't mmap\n"); return 1; } else { […]

bash声明结尾处的“ – ”是什么意思?

例如 bwa sampe ref.fa r1.sai r2.sai r1.fq r2.fq | samtools view -bSho out.bam -; “ – ”的目的是什么? 字符在最后? 他们在做什么? 为什么他们需要?

subprocess在读入协处理后挂起

我正在用pipe道编写一个协处理程序。 当孩子读取一些数据,处理它并输出它时,它工作正常。 但是,当我读取所有的数据并处理它,它只是悬而未决。 任何机构都有一些想法? 谢谢。 这里是源代码: #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <errno.h> int main() { #define MAXSIZE 1024 char workload[MAXSIZE]; char result[MAXSIZE]; workload[strlen(workload)] = EOF; int workload_size = strlen(workload); int fd1[2], fd2[2]; int n; pid_t pid; if (pipe(fd1) < 0 || pipe(fd2) < 0) { fprintf(stderr, "pipe error: %s\n", strerror(errno)); exit(1); […]

在C中模拟Linux命令tee

我必须在C for Linux中模拟命令tee 。 tee如何在内部工作? 它看起来像一个T形的pipe道,所以我应该使用pipe道? 有没有特殊的pipe子?

我不明白高内存的概念,我想

我收集了这么多。 “高内存是不存在逻辑地址的内存,因为它超出了为内核虚拟地址预留的地址范围。 在我看来,创build映射到高内存会有开销。 高内存是机器物理内存中的一个设置区域吗? 它通常在哪里开始和结束? 而最重要的是 – 为什么要这样呢? 为什么没有正常的3 GB / 1 GB的分割与映射/内核代码在1 GB?

使用C中的pipe道创build客户端和服务器时出现奇怪的行为

在这里,我试图创build一个简单的客户端和服务器使用pipe道。 我分叉一个进程,使孩子充当客户端和父母作为服务器。 以下是代码: #include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> void errorMsg(char* msg) { printf("\n%s\n", msg); // exit(0); } int main() { int servfd[2]; int clntfd[2]; int chldpid; if(pipe(servfd) < 0) errorMsg("Unable to create server pipe.!!"); if(pipe(clntfd) < 0) errorMsg("Unable to create client pipe.!!!"); if((chldpid = fork()) == 0) { char* txt = (char*) calloc(256, sizeof(char)); close(servfd[1]); close(clntfd[0]); […]

Linux中的进程或线程级电源监视

我正在寻找一些能够为Linux操作系统提供进程或线程级功耗的工具。 我正在寻找类似于顶级,vmstat,mpstat,活动监视器(MAC)等与电力使用相似的东西,即使近似)。 我看到了Andorid PowerTutor的一个工具,可以为特定的Andorid手机做好工作。 是否有类似的工具,可以提供统计的笔记本电脑/台式机等的Linux操作系统? 任何build议表示赞赏。

读取中间值时双向fifo通信块

我正在尝试使用fifo在两个进程之间来回发送信息。 它工作到一个点,但后来一个阅读块。 我怀疑Process2是错误的地方。 处理1: #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> main() { char oprtr; int fd1,fd0; float oprnd1,oprnd2,result; mkfifo("fifo1",0777); fd1=open("fifo1",O_RDWR); printf("fd1:%d\n",fd1); printf("Add(+)\n"); printf("subtract(-)\n"); printf("multiply(*)\n"); printf("division(/)\n"); printf("Enter operator\n"); scanf("%c",&oprtr); getchar(); write(fd1,&oprtr,sizeof(oprtr)); printf("Enter oprnd1\n"); scanf("%f",&oprnd1); getchar(); write(fd1,&oprnd1,sizeof(oprnd1)); fd0=dup(fd1); printf("Enter oprnd2\n"); scanf("%f",&oprnd2); getchar(); if(write(fd0,&oprnd2,sizeof(oprnd2))==0) perror("write : oprnd2:"); else printf("writing oprnd2 done\n"); read(fd1,&result,sizeof(result)); printf("Result:%f\n",result); } 过程2: #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> main() { int […]

在地图变得非常庞大之后,Linux C ++程序与St9bad_alloc崩溃

我正在运行一个C ++程序,涉及在红帽linux 64位构build倒排索引。 我的翻译指数定义为map<unsigned long long int, map<int,int> > invertID; 我得到这个错误随机崩溃,与what(): St9bad_alloc 。崩溃的每个时间是不同的。 有时候,我得到了1亿个密钥,而且还在运行一段时间。 有时,大约80,000,000个键,它已经大声说出错误。 谷歌search,我发现这个错误可能来自new ,但看看我的代码,我没有使用任何new关键字,但是,我有这样的内存分配与地图。 我继续在每次迭代中插入键/值对。 所以我决定用try catch语句做一些实验。 实际上,这里是代码和输出的关键部分: map<unsigned long long int, map<int,int> >::iterator mainMapIt = invertID.find(ID); if (mainMapIt != invertID.end()){ //if this ImageID key exists in InvID sub-map map<int,int> M = mainMapIt->second; // THIS IS LINE 174. map<int,int>::iterator subMapIt = M.find(imageID); […]

使用wmcrtl循环同一应用程序的窗口

我正在configurationxbindkeys使用快捷方式更改窗口焦点。 例如,我设法创build了一个专注于应用程序窗口的快捷方式,让我们说一个终结器窗口: wmctrl -xa terminator 不幸的是,它始终聚焦在相同的终止窗口,阻止我循环终止窗口。 你能build议我一个关注终结者窗口的命令吗?如果再次按下,会循环遍历所有终止者窗口吗? 更新2013年3月30日 我修改了这个脚本http://lars.st0ne.at/blog/switch%20between%20windows%20within%20the%20same%20application来创build一个脚本 script.sh NAME 关注应用程序名称或在NAME的所有窗口中循环,如果它的一个窗口已经被聚焦,但是它不能正常工作。 这是脚本 win_class=$1 # 'terminator' # $1 # get list of all windows matching with the class above win_list=$(wmctrl -x -l | grep -i $win_class | awk '{print $1}' ) # get id of the focused window active_win_id=$(xprop -root | grep '^_NET_ACTIVE_W' | awk […]