Articles of c + +

如何杀死一个PID不断变化的进程?

我知道我可以使用这个技巧if (fork()) exit(0); 改变当前进程的PID。 所以,下面的程序会有一个很快改变的pid。 如何杀死这样的进程? 有没有比执行大量killall procname更好的方法,直到能够在fork之前运行kill() ? 我知道这不是一个“进程”,但是每个进程只运行几微秒。 #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { pid_t self = getpid(); while (1) { if (fork()) exit(0); if (self + 10000 < getpid()) break; // Just to kill it after some time usleep(1000); } return 0; } 我发现列出进程的唯一方法是执行ps -A | grep procname ps […]

Linux C ++如何以编程方式获取LAN上所有适配器的MAC地址

如何在我的(小型)本地networking上使用C或C ++ PROGRAM (无命令行)来获取MAC地址(如果IP地址是“免费”的话,我也会使用它们)。 这是一个embedded式的Busybox Linux,所以我需要一个简单的答案,希望不需要移植一些库。 我没有libnet或libpcap。 如果DHCP主机,arpcaching似乎从不包含任何东西,但不包含MAC。

无法运行编译的文件 – bash:./a.out:权限被拒绝。 (我试过chmod)

我使用cc test.c编译了我的C源代码,并生成了a.out文件。 但是,当我运行它,我得到这个错误 – bash: ./a.out: Permission denied 我的源不在主目录中,它位于不同的FAT-32分区上,所以我使用以下命令安装了代码所在的驱动器 – $ udisks –mount /dev/sda7 –mount-options umask=022 Mounted /org/freedesktop/UDisks/devices/sda7 at /media/48E9-FD53 $ cd /media/48E9-FD53/C 然后我使用cc编译我的代码 我也试过gcc 。 但是我仍然得到相同的错误。 然后我做了 – chmod +x a.out ,仍然是同样的问题。 还有( chmod 755 a.out )和chmod u+x a.out 。 我也试着用sudo编译和执行程序。 我也试过 – sudo chown sannidhya:sannidhya a.out 。 我尝试了Googlesearch后发现的所有内容,但仍无法使其正常工作。 我如何运行.out文件(不移动到主目录)? 注 – 我正在使用Ubuntu 12.04 […]

确定客户端绑定的TCP端口号

我创build了一个TCP套接字,而不打扰绑定到[socket.sin_port = 0]的端口号。 不过后来如果我想打印客户端的端口号,我该怎么做呢? 客户端C应用程序(在Linux上)创build了许多连接到服务器的客户端。 为了debugging问题,我捕捉飘渺的stream量。 我想在问题出现时打印日志中的端口号,以便轻松过滤。 任何帮助,将不胜感激。 -Prabhu

为什么我得到这个错误? void *不是指向对象types的指针。

void *stackAddr[NUM_THREADS]; stackAddr[i] = malloc(STACKSIZE); 编译器(g ++ 4.4.3)抱怨malloc被调用的地方… warning: pointer of type 'void *' used in arithmetic error: 'void*' is not a pointer-to-object type 如果你有兴趣看到整个代码,在这里它… #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define NUM_THREADS 4 void *stackAddr[NUM_THREADS]; pthread_t thread[NUM_THREADS]; pthread_attr_t attr; void *BusyWork(void *t) { int i; long tid; double result=0.0; tid = (long)t; […]

Linux USB编程

我是Linux内核编程的新手。 我希望开发一个程序来读取USB驱动器信息,如制造商名称,容量等。我知道描述符及其属性。 但我不明白如何枚举连接到系统的USB驱动器。 我正在寻找启动内核和USB端口之间连接的function。 这怎么可能?

如何在Eclipse中设置一个Linux C ++项目?

我在Linux环境中有一个现有的C ++项目,并想将其导入到Eclipse IDE中。 不知道是否应该启动一个新的Eclipse C ++项目,或者是否有一些方法来导入源文件?

在传递NULL的情况下转储核心

strdup(null)转储核心。 尝试在Ubuntu和FreeBSD的两个。 为什么? 它不应该返回null吗? char *b = NULL; a = strdup(b); 这将会在strdup调用中转储核心。

Windows上的Cmake不会添加共享库path(适用于Linux)

我一直在Linux上使用CMake和Eclipse一段时间,一直在处理包含众多可执行文件和共享对象的多个目标项目。 我使用了源代码构build和在Linux上的二进制文件被放到自己的目录。 当我在linux上执行这个操作时,eclipse以某种方式能够find共享对象,并且很好地运行可执行文件,但是在Windows上这种情况不会发生。 在Windows上,我不得不添加一个指向dll的PATH环境variables,或者我可以将其构build到一个bin和lib目录中(尽pipe我过去曾经用过一个我忘记的问题,使我想避免这个问题) 。 为什么这在Windows上运行不同于linux? 这是我失踪的设置还是这只是不工作? 构build本身正在完美工作。 我正在使用MinGW,Eclipse Kepler和Windows 7 64位。 提前致谢。

堆栈限制和线程之间的关系

在Linux实现(或任何操作系统)中,ulimit -s <value >与堆栈大小(在线程级别)之间的关系是什么? 是<number of threads > * <each thread stack size >必须小于< stack size assigned by ulimit command >有效alignment? 在下面的程序中 – 每个线程分配char [PTHREAD_STACK_MIN]并创build10个线程。 但是,当ulimit被设置为10 * PTHREAD_STACK_MIN时,它不会因为中止而造成内存溢出。 对于stacksize的一些随机值(远小于10 * PTHREAD_STACK_MIN),它是核心转储。 为什么这样? 我的理解是,stacksize表示由进程的所有线程总和占用的堆栈。 线程函数 #include <cstdio> #include <error.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h> #include <sys/resource.h> using namespace std; #include <pthread.h> #include <bits/local_lim.h> const unsigned […]