Articles of c + +

C Minishell添加pipe道

所以我正在制作一个UNIX minishell,并试图添加pipe道,所以我可以做这样的事情: ps aux | grep dh | grep -v grep | cut -c1-5 不过,我在缠绕pipe道部分时遇到了麻烦。 我把所有的“|” 字符为0,然后将每行作为普通线路运行。 但是,我试图转移输出和input。 一个命令的input需要是前一个命令的输出,一个命令的输出需要是下一个命令的input。 我正在做这个使用pipe道,但是我不知道在哪里调用pipe()以及在哪里closures它们。 从主处理函数processline()中,我有这样的代码: if((pix = findUnquotChar(line_itr, '|'))) { line_itr[pix++] = 0; if(pipe (fd) < 0) perror("pipe"); processline(line_itr, inFD, fd[1], pl_flags); line_itr = &(line_itr[pix]); while((pix = findUnquotChar(line_itr, '|')) && pix < line_len) { line_itr[pix++] = 0; //? if(pipe […]

getaddrinfo内存泄漏

我有这个代码获取有关IPv4地址的信息: struct addrinfo hints, *info = NULL; char addr4[INET_ADDRSTRLEN]; memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_family = AF_INET; if (!getaddrinfo(argv[hostPara], NULL, &hints, &info)) { inet_ntop(AF_INET, &((const sockaddr_in *)info->ai_addr)->sin_addr, addr4, INET_ADDRSTRLEN); } if (info != NULL) { freeaddrinfo(info); } 但如果我testingargv [hostPara]是“www.google.com”我从valgrind得到这个: ==3632== 168 bytes in 1 blocks are still reachable in loss record 1 of 1 […]

Canot编译使用boost的odeint的C ++

我在Ubuntu 12.04上,并且已经在/ usr / include中有了一些提升。 我做了一个 sudo apt-get install libboost-all-dev 并且也安装了很多文件。 我不想删除这个提升并从源代码安装,因为其他几个软件包依赖于Ubuntu的版本。 这是我想要运行的示例代码: #include <iostream> #include <boost/numeric/odeint.hpp> using namespace std; using namespace boost::numeric::odeint; typedef vector< double > state_type; const double sigma = 10.0; const double R = 28.0; const double b = 8.0 / 3.0; void lorenz( state_type &x , state_type &dxdt , double t […]

使用Opencv直接从networking摄像头获取灰度图像

由于在我的embedded式应用程序中,我需要灰度图像,为了节省时间,我试图直接从networking摄像头获取帧,而不需要从RGB格式转换中获取帧。 我find的例子获取RGB中的帧,然后将其转换 cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY) 谢谢。

如何指定在Linux中使用哪个接口

是否有可能绑定一个udp套接字到一个特定的接口,所以它通过该接口发送数据? 我有一个应用程序使用多个Udp套接字来发送数据,它运行在具有多个接口的机器上。 我知道可以通过使用下面的代码来指定接口名称: int UdpSocket::open(const char *interface) { send_fd_ = ::socket(AF_INET, SOCK_DGRAM, 0); if (send_fd_ < 0) { perror("socket"); return -1; } int val = 1; int rc = ::setsockopt(send_fd_, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); if (rc < 0) { perror("sesockopt"); close(); return -1; } unsigned char ttl = 16; rc = ::setsockopt(send_fd_, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, […]

为MPC6050编写驱动程序i2c

我是C新手,我尝试写一个MPC6050加速计的驱动程序。 (Android 4.2.2的内核3.4)。 这是这个问题的下列。 这个页面和这个帮助我,但我不能使用驱动程序呢: arch/arm/mach-sun7i/core.c:77:44: warning: 'sun7i_i2c_platform_data' defined but not used [-Wunused-variable] arch/arm/mach-sun7i/core.c:136:41: warning: 'sun7i_i2c_platform_device' defined but not used [-Wunused-variable] 我正在处理/ANDROID/lichee/linux-3.4/arch/arm/mach-sun7i/core.c文件。 (相当于board-machine.c) 我粘贴了每个结构基础的结构。 初始化函数是,我希望确定,像这样: /* ACCELEROMETER*/ #include <linux/i2c-gpio.h> #include <linux/mpu.h> #include <linux/i2c.h> #include <mach/i2c.h> #include <mach/gpio.h> #define I2C_SDA TWI_LCR_SDA_EN #define I2C_SCL TWI_LCR_SCL_EN /* * /////////// from linux/i2c-gpio.h ////////// * struct i2c_gpio_platform_data { unsigned int […]

我怎么知道一个进程正在运行的核心?

我目前正在开发一个关于在linux环境下将进程设置为一个核心的项目。 我使用sched_setaffinity来完成这项工作,我想知道是否有一些由linux提供的函数来获取进程运行的核心。 我使用顶级命令,并发现它可以得到这个信息使用j选项。 所以我相信有一些方法可以在用户空间获得这个信息。

简单的C代码可以在HPUX上正常工作,但是Linux上的段错误。 为什么?

我很长时间没有做过任何严肃的C,希望能够快速解释一下。 以下代码在HP / UX上编译并运行良好。 它在GCC 4.3.2上编译没有任何警告(甚至是在gcc-Wall中),但在Linux上运行时却是segfaults。 谁能解释为什么? #include <stdio.h> int main() { char *people[] = { "Abigail", "Bob" }; printf("First: '%s'\n", people[0]); printf("Second: '%s'\n", people[1]); /* this segfaults on Linux but works OK on HP/UX */ people[1][0] = 'R'; printf("First: '%s'\n",people[0]); return(0); }

如何将目录path转换为唯一的数字标识符(Linux / C ++)?

我正在调查的方式采取一个目录(文件夹),并派生某种forms的唯一的数字标识符。 我调查过“string哈希”的方法,但是, 鸽子洞原则意味着永远不可能为每一个string派生一个真正唯一的数字。 string到唯一哈希是不好的。 我最近一直在调查其他方法来实现我的目标,因此有以下问题要问: 目录时间戳 – 他们有多“独特”? 这里所描述的“stat”报告的时间戳记是什么样的(第二篇文章)? 如果分辨率足够小,是否有可能多个文件夹在Linux系统上共享完全相同的时间戳? 如果任何人有其他方法/技术,他们想分享,我会很高兴听:) 编辑1为了澄清我的用例,以回应迄今为止发布的答案:我正在Android平台上工作,所以文件系统没有链接到任何其他(除了Micro SD卡等可移动媒体除外)。 我将每个path插入数据库,但试图避免查询表时string比较。 地图/ hashmaps的使用不是一个选项在这里。 是的,path本身是唯一的,但理想情况下,我需要一个数字标识符,可以用来查询表,而不是path本身。 每个path的标识符也必须是唯一的。 我已经用std :: collat​​e进行了实验,但是发现哈希中有很多碰撞(一个数据集有20,000条path,大约有100个碰撞)。 更令人惊讶的是,每次我的应用程序运行时,哈希似乎都大不相同。 我想知道它是否以某种方式播种? 非常感谢,P

使用fork()在C(不是C ++)中创build3个孩子

嗨,我一直在制定一项计划,让孩子们分叉,然后再从每个孩子那里分娩更多的孩子,但这不是我需要帮助的。 当我运行我的程序(在这里它是一个function,但工作原理是一样的)我应该有一个父母(PPID)产卵3个孩子(PIDS = 1,2,3),但我得到的是相同的PID和PPID 3次(我现在的代码),或者在我得到3个父母之前,每个父母都有一个孩子,PPIDS与PIDS不同,但PPID与以前的孩子PID一样。 在我最近的尝试中,从不在父子(父亲)的信息上方显示孩子(儿子)。 它应该看起来像这样 [dad] hi am I PID 1234 and I come from ####(dont care what this number is) [son] hi i am PID 1111 and I come from PPID 1234 [son] hi i am PID 1112 and I come from PPID 1234 [son] hi i am PID 1113 and I […]