Articles of c + +

如何更新nginx模块运行时的内部状态?

让我们假设我想编写一个通过IP来阻止客户端的nginx模块。 为了做到这一点,在初始化阶段,我读取一个IP地址的文件,我必须阻止(黑名单),并将其存储在模块的上下文中。 现在我想更新黑名单而不重新启动nginx。 可能的解决scheme之一是在特定位置添加处理程序。 例如,如果uri“/block/1.2.3.4”请求,我的处理程序将IP地址1.2.3.4添加到黑名单。 但是,nginx将几个工作者作为分离的进程运行,因此只有一个特定的工作人员将被更新。 解决这些问题的常见模式是什么?

如何用C ++中的FastCGI(nginx)创build一个cookie

我在nginx上使用FastCGI在C ++中创build一个网站。 我的问题是现在跟踪用户(aka会话)。 我可以读取HTTP_COOKIE,但我不知道如何创build一个名称和值的新cookie,并将其发送到客户端。 在Google中查找我只find了试图用CGI / fCGI运行的PHP,Python和其他脚本语言的相关内容。

C中好奇的string复制函数

当我读取nginx代码时,我已经看到了这个函数: #define ngx_cpymem(dst, src, n) (((u_char *) memcpy(dst, src, n)) + (n)) static ngx_inline u_char * ngx_copy(u_char *dst, u_char *src, size_t len) { if (len < 17) { while (len) { *dst++ = *src++; len–; } return dst; } else { return ngx_cpymem(dst, src, len); } } 这是一个简单的string复制function。 但是为什么它testingstring的长度,并切换到memcpy如果长度是> = 17?

如何使用fastcgi C / C ++应用程序访问POST请求的主体

我使用C ++应用程序中的http://fastcgi.com/作为后端,使用nginxnetworking服务器作为前端。 从HTML表单成功发布文件,并可以看到nginx服务器端的临时文件。 但我不知道如何使用fastcgi_stdio访问多部分POST请求的主体。 这是我的HTMLforms。 <html> <head> <title>Test Server</title> <script src="http://code.jquery.com/jquery.min.js"></script> </head> <body> <form id="upload-form" method="post" target="upload_target" enctype="multipart/form-data" action="/upload"> <input name="file" id="file" size="27" type="file" /><br /> <input type="submit" name="action" value="Upload" /><br /> <iframe id="upload_target" name="upload_target" src="" style="width:100%;height:100px;border:0px solid #fff;"></iframe> </form> </body> </html> 我的nginx conf文件: location /upload { # Pass altered request body to this location […]

最好的方法来创build一个C + +应用程序与nginx沟通

我需要编写一个C ++接口,它可以读取我们的数据结构,并使用http协议提供基于查询的o / p。 服务器需求 它应该能够同时服务100个客户。 为什么selectC ++ 所有代码已经用C ++编写。 所以我们只需要用C ++编写一个http层。 这就是为什么我selectC ++而不是更传统的Web编程语言。 我正在考虑使用nginx来提供静态文件,并使用它的代理传递与C ++进行通信。 我发现有两种方法: 编写一个FastCGI c ++模块。 编写一个node.js c ++模块。 如果你有任何其他build议,请 你能否根据以前的经验列出每种方法的优点和缺点?

如何使用mysql的连接器

我想使用连接器为MySQL数据库。 我正在关注这个页面 http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html 但似乎很难。 还有其他教程吗? 请告诉我。

来自socket()调用的错误

我想为我的程序添加IPv6支持,并遇到奇怪的错误。 我想打开接受连接的套接字。 这是我的情况: 首先我使用getaddrinfo()来查找套接字configuration: struct addrinfo hint, *info = NULL; memset((void *)&hint, 0, sizeof(hint)); hint.ai_family = AF_INET6; hint.ai_flags = AI_PASSIVE | AI_NUMERICSERV; hint.ai_socktype = SOCK_STREAM; if ((error = getaddrinfo(NULL, "1234", &hint, &info))) { /* some error handling */ } 我在info产生非NULL结果。 然后我想创build套接字: socket(info->ai_family, info->ai_socktype, info->ai_protocol) 这里我得到-1 strerror(errno) 返回Address family not supported by protocol 我认为getaddrinfo()只返回可以绑定的地址,我期望它在这种情况下返回NULL。 我错过了什么? 我想补充说我的eth0目前没有IPv6地址。 […]

请评论这是否适用于进程和线程之间的通信

一个进程中有几个进程和一些线程。 所有的stream程都需要互相交stream。 一个进程中的线程需要与进程进行通信(主线程)。 我想知道这个devise是否有效: 每个进程都有一个msg队列(使用msgget(),msgsnd,msgrcv()),以便他们可以通过linux API相互交谈。 每个线程都有一个msg队列(也使用msgget,msgsnd,msgrcv),以便它可以与主线程和其他线程交谈。 所以,线程驻留的这个进程将有进程队列和线程的队列,是否有任何问题? 我很担心项目2,因为我学到的是msgget,msgsnd,msgrcv是进程间通信。 我阅读有关这些function的手册。 看起来没有提到这些function是否支持线程。 另外,请你参考一些最好的在线Linux / Unix手册吗? 我不擅长它,因为我觉得很难find我想要的东西,如果一个函数或信号量可以支持线程/手动。 愚蠢的问题, :)。 请帮忙。 谢谢。

快速索引格式为“常量数据库”

我在linux上进行c编程,遇到了一个需要非常快的查找速度的问题。 如果一个表像正常的MySQL表一样,如下所示: ID name age sex score_a score_b score_c date 这是恒定的 ,这意味着一旦创build了该表并且不允许更新。 它只用于阅读。 由于它是不变的,所以我猜想必须有一个更好的索引格式,以便按照条件(如年龄,分数等)快速查找,而不是在大多数索引数据库中实现的“B树索引”。

无法findMBRtypes

我有这个代码是一个项目源的一部分。 该代码findMBRtypes:GRUB或LILO,并相应地设置一个标志。 令人惊讶的是,在SLES 10-SP1(SUSE Linux Enterprise Server)中,无法确定。 /dev/sda1是我的交换。 /dev/sda2是包含MBR在内的整个目录。 相同的代码适用于SLES11等。 这里MBR_SIZE被#defined为0x1be 。 int lnxfsGetBootType(int pNumber) { int i, retval = -1, ccode; PartInfo *p = &cpuParts[pNumber]; char buffer[SECTOR_SIZE]; var64 offset = 0; isdLogFileOut(ZISD_LOG_DEVELOPER,"[lnxGBT]\n"); if (getenv("ZENDEVICE") || gUtilPart == 1) { offset = p->pOffset; // look at the partition BPB } //Now try to find the […]