Articles of c + +

在C中使用stdin和select()

我有以下程序: #include <stdio.h> #define STDIN 0 int main() { fd_set fds; int maxfd; // sd is a UDP socket maxfd = (sd > STDIN)?sd:STDIN; while(1){ FD_ZERO(&fds); FD_SET(sd, &fds); FD_SET(STDIN, &fds); select(maxfd+1, &fds, NULL, NULL, NULL); if (FD_ISSET(STDIN, &fds)){ printf("\nUser input – stdin"); } if (FD_ISSET(sd, &fds)){ // socket code } } } 我面对的问题是,一旦在STDIN上检测到input,“用户input – 标准input”信息将继续打印…为什么在循环检查哪些描述符已input时不打印一次? […]

虽然没有任何投入,为什么投票仍在返回?

我写了一个小testing程序来弄清楚如何与poll进行交谈。 我创build了三个文件testa , testb , testc ,并将stringhello\n写入第一个。 所以,这里是我的poll : poll(polls.data(),polls.size(),-1) 根据手册页,超时-1应表明系统调用永远不会超时。 然而,它没有任何东西可以读。 我总是消耗一个字节的input,可以看到你打印的hello\n ,但民意调查并没有停止在那里。 它只是假装在那里有东西要读。 #include <sys/types.h> #include <sys/stat.h> #include <sys/fcntl.h> #include <sys/poll.h> #include <unistd.h> #include <errno.h> #include <vector> #include <map> #include <string> #include <iostream> typedef int fd_t; int main() { fd_t const a = open("testa",O_RDONLY); fd_t const b = open("testb",O_WRONLY); fd_t const c = […]

字符设备捕获多个(int)ioctl参数

我必须编写一个linux char设备,它可以为每个unlock_ioctl处理ioctl(无BKL)函数。 目前,我可以从用户空间ioctl命令收到一个参数 __get_user(myint, (int __user *) arg); 我怎样才能接收多个int参数(例如这个调用)? ioctl(fp, SZ_NEW_DEV_FORMAT, 0, 1, 30);

无法理解Linux内核模块中read_proc的工作

我正在阅读此页面上的内核模块示例 程序中使用的read_proc如下所示: int fortune_read( char *page, char **start, off_t off, int count, int *eof, void *data ) { int len; if (off > 0) { *eof = 1; return 0; } /* Wrap-around */ if (next_fortune >= cookie_index) next_fortune = 0; len = sprintf(page, "%s\n", &cookie_pot[next_fortune]); next_fortune += len; return len; } 有人可以解释为什么off被检查为大于0.此外,有人可以解释什么是closures和计数论证的重要性。 到目前为止,我的理解是,我们必须在页面上写入数据,并且在数据结束时必须设置eof。 谢谢。

如何closureswrite()系统调用的缓冲?

我曾经认为write()系统调用是无缓冲的, fwrite和fread用于缓冲IO。 不过,我写了一些简单的程序来确定在使用write()时仍然有一些缓冲。 我在套接字上使用write()和read() 。 由于缓冲,服务器不停地发送数据包时,客户端可能会滞后。 我不要那个。 我希望客户端必须在服务器发送更多logging之前消耗logging。 我怎样才能做到这一点,而不增加确认等networking负载! 我在linux上使用gcc server.c: #include <stdio.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <netinet/in.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <netinet/tcp.h> int remote_rr_port=2000; // Server will send RR logs using connection on this port. char const *remote_server_ip="127.0.0.1"; int connFD_rr; static void startTcpServer(int *sd, […]

CUDA和固定(页面locking)内存不是页面locking?

我试图弄清楚CUDA(或OpenCL实现)是否在需要固定(页面locking)的内存时说实话。 我试着cudaMallocHost并看着/proc/meminfo值Mlocked和Unevictable ,都停留在0,永远不会( /proc/<pid>/status报告VmLck也为0)。 我用mlock来locking页面内存,并按照预期值上升。 所以这种行为的两个可能的原因可能是: 我没有从CUDA API获取页面locking内存,并且cudaSuccess是假的 CUDA绕过了页面locking内存的操作系统计数器,因为CUDA在Linux内核方面有一些神奇的function 所以实际的问题是:当我使用CUDA分配页面locking内存时,为什么我无法从操作系统获取页面locking内存的值? 另外:如果不是从/proc/meminfo或/proc/<pid>/status我可以在哪里得到正确的值? 谢谢! 系统:Ubuntu 14.04.01 LTS; CUDA 6.5; Nvidida Driver 340.29; Nvidia Tesla K20c

如何杀死在c + +的过程,只知道它的名字的一部分

前段时间我需要编写c ++代码来杀死一些进程。 在我的主程序中,我使用系统(“…”)在input上运行带有不同文件名string的大型CAE系统软件包。 CAE软件创build了许多进程,包含进程名string文件名 )。 一些CAE进程worktime > max_time ,比我需要closures他们: //filename contains part of CAE-process name string s="/bin/kill -9 `ps aux | grep "+filename+" | awk {'print $2'}`"; system(s.c_str()); 输出是: Usage: kill pid … Send SIGTERM to every process listed. kill signal pid … Send a signal to every process listed. kill -s signal pid … […]

如何访问timeval结构的字段

我试图打印struct timevalvariables中的值,如下所示: int main() { struct timeval *cur; do_gettimeofday(cur); printf("Here is the time of day: %ld %ld", cur.tv_sec, cur.tv_usec); return 0; } 我不断收到这个错误: 请求成员“tv_sec”在某些不是结构或联盟。 请求成员“tv_usec”的东西不是一个结构或联盟。 我怎样才能解决这个问题?

从ARM的源代码交叉编译Qt 4.7的问题

我试图从源代码交叉编译Qt 4.7.1,这里有一些关于我的设置的注释: 我的预期输出是为了运行Qt应用程序而需要存在的共享对象库。 我的目标平台是采用ARM Cortex-A8架构的TI AM335x处理器。 我的开发平台是x86 64位Ubuntu虚拟机 我对这个应该如何工作的理解是,我下载了我的目标平台(这是TI的Linaro工具链)的工具链,我下载了Qt 4.7.1的源代码,我设置了mkspec来使用我的工具链,运行configure ,那么只需要运行make / make install ,我应该能够find所有.so的地方,我告诉它安装到。 但是,我有很多问题让这个想法工作。 首先,我下载了TI SDK版本:ti-sdk-am335x-evm-06.00.00.00,其中arm工具位于: [root_install_dir]/linux-devkit/sysroots/i686-arago-linux/usr/bin 我更新了我的$PATH与该目录: mike @ mike-VirtualBox:〜$ echo $ PATH /home/mike/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin:/ usr / local / Trolltech /Qt-4.8.5/bin:/home/mike/bin:/usr/lib/lightdm/lightdm:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin目录:/ bin中:在/ usr /游戏:/首页/麦克风/箱 然后我根据最接近的例子创build了自己的mkspec: cp […]

Linux中C ++应用程序的内存稳定性

我想validation我为Linux编写和编译的C ++应用程序的内存稳定性。 这是一个networking应用程序,以每秒10-20个连接的速度响应远程客户端连接。 从长远来看,内存是上升到50MB,尽pipe该应用程序正在打电话删除… 调查显示,Linux不会立即释放内存。 所以这是我的问题: 如何强制Linux释放我实际释放的内存? 至less我想这样做一次来validation内存的稳定性。 否则,有没有可靠的内存指示器可以报告内存我的应用程序实际上是持有?