Articles of c + +

epoll是否保留了fd的注册顺序?

我正在玩Linux系统调用,我发现了epoll一些方面,这是不清楚的。 说,我创build一个epoll实例: epollfd = epoll_create(50); 接下来,我在for -loop中注册了50个文件描述符: for(i=0; i<50; i++){ // open file "file-i".txt // construct epoll_event // register new file descriptor with epoll_ctl(epollfd, EPOLL_CTL_ADD … 现在我们有50个文件,准备行动(读或写 – 无所谓)。 我们将MAX_EVENTS设置为3: #define MAX_EVENTS 3 … struct epoll_event events[MAX_EVENTS] … epoll_wait(epollfd, events, MAX_EVENTS, -1) 所有这50个文件都准备好了,我们只问了其中的3个。 哪些文件将在events数组中? [1,2,3] – 前3个文件,以便他们被添加到epoll [48,49,50] – 最后3个文件,以便他们被添加到epoll [34,7,15] – 随机3个文件 任何其他选项 谢谢。

在使用分叉时如何映射内存?

我是新来的“fork()”,我到处读到,当一个fork()被调用当前(调用)进程的确切副本开始。现在,当我运行下面的代码,应该有两个不同的进程,分配给他们的variables和函数的内存位置。 #include<stdio.h> int i=10; int pid; int main(){ if((pid=fork())==0){ i++;//somewhere I read that separate memory space for child is created when write is needed printf("parent address= %p\n",&i);// this should return the address from parent's memory space }else{ i++; i++; printf("child address= %p\n",&i);// this should return the address of child's memory space } wait(0); return(0); } […]

在不使用Epoll的Linux上升级Asio

我的印象是,boost :: asio会默认使用epoll设置,而不是select实现,但是在运行一些testing之后,看起来像我的设置正在使用select。 操作系统:RHEL 4 内核:2.6 GCC:3.4.6 我写了一个小testing程序来validation哪个反应器头被使用,看起来像使用select反应器而不是epoll反应器。 #include <boost/asio.hpp> #include <string> #include <iostream> std::string output; #if defined(BOOST_ASIO_EPOLL_REACTOR_HPP) int main(void) { std::cout << "you have epoll enabled." << std::endl; } #elif defined(BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP) int main(void) { std::cout << "you have select enabled." << std::endl; } #else int main(void) { std::cout << "this shit is confusing." << […]

Big Endian和Little Endian支持字节sorting

我们需要支持3个硬件平台–Windows(小端)和Linux Embedded(大端和小端)。 我们的数据stream取决于它使用的机器,数据需要分解成位域。 我想写一个macros(如果可能的话)来抽象出细节。 在Linux上,我可以使用bswap_16 / bswap_32 / bswap_64进行Little Endian转换。 但是,我无法在我的Visual C ++包含中find这个。 是否有两个平台(Windows和Linux)的通用内置? 如果没有,那么我可以在Visual C ++中使用什么来做字节交换(除了自己写的 – 希望一些机器优化的内置)? 谢谢。

Linux fork / exec到同一个目录下的应用程序

是否有一个exec变体,将使用当前的应用程序目录来定位目标程序? 我正在使用C ++和Qt来实现“最后的沟渠”错误报告系统。 使用Google Breakpad ,我可以创build一个小型转储并直接执行到一个处理程序。 因为我的应用程序处于不稳定状态,所以我只想使用最小的依赖关系来分叉并启动一个单独的error handling过程。 错误报告应用程序将被部署在与应用程序可执行文件相同的目录中。 我很不熟悉fork和exec选项,并且没有find包含searchpath中当前应用程序目录的exec选项。 这是我到目前为止: static bool dumpCallback(const char* /*dump_path*/, const char* /*minidump_id*/, void* /*context*/, bool succeeded) { pid_t pid = fork(); if (pid == 0) { // This is what I would *like* to work. const char* error_reporter_path = "error_reporter"; // This works, but requires hard-coding the entire […]

X86 64位汇编Linux'Hello World'连接问题

我试图跟进这个线程 ,不幸的是不能解决我的问题。 我试图运行的代码如下所示: ; File hello.asm section .data msg: db "Hello World!",0x0a,0 section .text global main extern printf main: push rbp mov rbp, rsp lea rdi, [msg] ; parameter 1 for printf xor eax, eax ; 0 floating point parameter call printf xor eax, eax ; returns 0 pop rbp ret 我的系统是debian stretch: $ uname […]

glPopMatrix()在“setup_hardware_state”中喊出“不受支持的纹理格式”

我试图在Linux的私人video播放器中进行一些优化,旨在提高性能,因为播放MP4文件在CPU上很重 ,因为video帧是用YV12编码的,而OpenGL不提供本地方式来显示这种格式。 现在有一个代码在CPU上运行,将图像发送到GPU进行显示之前将YV12转换为RGB,这样就消耗了100%的CPU处理量。 我目前正在研究如何解码YV12帧,而不必编写着色器来执行YV12 – > RGB转换。 据我所知,做到这一点的一种方法是通过GL_MESA_ycbcr_texture ,显然是由我的系统(由glxinfo报告)支持。 在这个Fedora Box中,我有一个ATI Technologies公司的RV610video设备[Radeon HD 2400 PRO] ,这是一个体面的video卡。 然后,我下载了yuvrecttesting,并进行了一些更改,以replace此卡所支持的纹理GL_TEXTURE_RECTANGLE_ARB : GL_TEXTURE_RECTANGLE_ARB 。 但是,当我执行这个修改后的应用程序时,输出: The MESA driver reports *unsupported texture format in setup_hardware_state* 我注意到,这个错误显示当glPopMatrix(); 从Display()callback中执行。 现在, 这似乎不是我的应用程序中的一个错误,因为我在另一个具有不同video卡的Fedora盒(同一系统)上运行完全相同的代码: Intel Corporation Sandy Bridge集成graphics控制器(09版) beatifully。 这两个二进制文件之间唯一可见的区别是它们所链接的库。 在(有问题的)ATI卡ldd报告: linux-gate.so.1 => (0x00da3000) libGL.so.1 => /usr/lib/libGL.so.1 (0x077bd000) libGLU.so.1 => /usr/lib/libGLU.so.1 (0x0783b000) libglut.so.3 => /usr/lib/libglut.so.3 […]

用于Linux的C ++ IDE,具有智能参考searchfunction

是否有一个IDE支持C + +真正的智能search引用? “引用”是指在整个项目或工作空间中使用类(或其成员),variables,函数。 有很多IDE提供它。 其中一些似乎只是search同名的文本给予很多的东西,其他人更聪明,并检查上下文(如类边界,命名空间),但不够准确。 迄今为止我所尝试的最好的是Visual SlickEdit,但还有更多的希望。 class C1 { int foo; }; class C2 { int foo; }; 例如,在searchC1::foo引用的情况下,我不希望C2::foo也显示出来。 那么,有没有一个IDE会非常聪明? EDIT2 目前为止,每个人都有10个答案。 我尝试了Eclipse ,引用search似乎相对较好,但它需要20分钟索引中等大小的项目和5的4次内存耗尽和崩溃。 我试图增加它和其他一些build议,并得到了一些更好的,但仍然相当缓慢,讨厌这些崩溃。 我试过KDevelop3 ,但是这个问题中提到的function不是很先进 – 似乎只是非常先进的基于grep的文本search。 Edit4 KDevelop4 – 我试图使它工作,但最新的testing版是非常不可用的自定义生成文件项目,我无法做任何事情。 Edit5 我很惊讶,但是QT Creator在我的testing中做得非常好。 它似乎没有创build一些标签/索引文件,但不知何故设法非常精确地显示variables/函数/类的用法。 不幸的是,当遵循函数的定义时,它似乎不能很好地与模板一起工作。 没有一个提到的IDE可以与Visual SlickEdit竞争参考,虚拟function等.QT Creator是最接近的,所以我会select它作为我的问题的答案。

Android中的USB Dongle识别 – Beaglebone

问题 : 部分华为USB Dongle在Beaglebone中未被Android JellyBean4.1.2识别。 详细 : 我正在使用Android JellyBean4.1.2上运行的BeagleBone。 Huawei – E1731 [Locked] , Huawei – E303D [Locked]在这个平台上工作正常 。 Huawei E303F , Huawei E303F (Both Factory Unlocked)都无法被OS 识别 (通讯文件未生成) 我自己做的解决方法 使用AT命令将Dongle模式更改为仅调制解调器模式 将供应商ID和产品ID添加到init.devicename.sh(强制内核识别USB Dongle) 使用VID和PID更改USB模式开关文件 现在提到的USB软件狗工作正常。 但是我想find根本原因并且必须解决它。 有没有任何select通过从源代码构buildAndroid操作系统来解决它? 如果是的话,怎么样? 哪些文件需要更改? 为什么有些软件狗直接识别没有提到的解决方法? UPDATE 正如skoperst所说,我在kernel_dir/drivers/usb/serial/option.c other than hard-coding Device VID & PID是否还有其他的解决scheme。 我需要一些更通用的解决scheme,以促进Plug & Play机制。 如何Plug & Play […]

如何从存储在char *指针中的名称调用ac函数?

我想dynamic调用一个函数的名字,例如,假设有以下函数和string: void do_fork() { printf ("Fork called.\n"); } char *pFunc = "do_fork"; 现在我需要通过*pFunc调用do_fork() 。 那可能吗? 无论是C / C ++代码欢迎,非常感谢!