Articles of c + +

仅在* .cpp和* .htypes的文件中进行计数

我已经遵循bash脚本。 它只计算* .cpp中的行数。 如何在* .h文件中计算行数,而不使用pugixml.cpp? find . -type f -name \*.cpp -and ! -name \pugixml.cpp -exec cat '{}' + | wc -l

如果同时通过2个不同的进程在同一文件上调用写入系统调用会发生什么情况

操作系统是否正确处理? 或者我将不得不打电话给flock()?

为什么我的C程序花费的时间比自己计算的时间多?

我使用Linux上的时间命令来衡量我的程序花了多长时间,并在我的代码中,我已经把计时器计算时间 time took calculated by program: 71.320 sec real 1m27.268s user 1m7.607s sys 0m3.785s 我不知道为什么我的程序花了不less时间计算,如何find原因并加以解决呢? ================================================== ==== 这里是我如何计算我的代码的时间; clock_t cl; cl = clock(); do_some_work(); cl = clock() – cl; float seconds = 1.0 * cl / CLOCKS_PER_SEC; printf("time took: %.3f sec\n", seconds);

在Linux中的C程序是否得到一个PID?

我有一个简单的C程序,当我用./output编译和运行它,它是否在Linux上得到一个PID? (我想,每个正在运行的程序都是一个进程,它应该有一个PID。) 我使用ps aux命令,但是我找不到进程名称。 我记得,当我的控制台应用程序(一个C程序)在Windows 7上运行时,我可以通过波动率工具获得它的PID。 #include<stdio.h> void main() { printf("Hello World!"); }

如何使用recvfrom获取AF_INET6套接字的地址

recvfrom要求第5个参数是指向sockaddr结构的指针,第6个参数是指向socklen_t的指针。 man recvfrom (3)说: 如果地址的实际长度大于提供的sockaddr结构的长度,则存储的地址将被截断。 我不明白如何检索发送套接字的地址与AF_INET6地址系列,因为sockaddr_in6的大小比sockaddr因此它会被recvfrom截断。 我是否知道recvfrom无法检索大于sizeof(sockaddr)地址? 即使我定义了一个sockaddr_in6的实例,把它的地址转换为sockaddr*并传给recvfrom ,函数也不会知道有足够的空间来存储地址吗?

从函数readdir中释放(删除)分配的内存

我在Linux环境中使用C编程语言来读取目录中的文件。 我在我的代码中包含#include<dirent.h> ,并使用函数readdir() 。 根据在线的Linux页面,它说,不要在生成指向dirent结构的指针上调用free() ,因为它可能被分配在堆栈上。 你能帮我理解这是如何工作的吗? 我不明白为什么我们不必删除struct dirent 。 何时删除,谁删除? 这里是我正在谈论的摘录: readdir()成功时返回一个指向dirent结构的指针。 (这个结构可能是静态分配的;不要试图free(3)它free(3) )如果到达目录stream的末尾,返回NULL ,并且errno没有改变。 如果发生错误,则返回NULL ,并适当地errno 。

在main方法中调用一个返回String的函数

我是C ++新手,正在编写一个简单的程序来testing使用string。 我已经定义了一个单独的函数,返回一个string,并希望在主方法中调用它。 相同的代码在主要方法内工作,但我需要将其定义为一个单独的函数。 我的代码如下: 7 #include <cstdlib> 8 #include <iostream> 9 #include <string> 10 11 using namespace std; 12 13 // function declaration 14 string hi(); 15 16 int main(int argc, char** argv) { 17 // call method 18 string hi; 19 hi = hi(); 20 cout << hi << endl; 21 } 22 […]

c / linux无限循环应用程序:如果kill -9命令被调用,释放内存

我在linux下开发了一个包含无限循环while(1)的C应用程序。 有一些指针是dynamic分配的,在无限循环下是有用的,所以唯一一次释放内存是在通过ctrl-z , ctrl-c , kill -9 apppid , killall appname中断while(1)之后。 所以我的想法是,我把新的处理程序释放内存中断事件信号。 void deallocatehandler(int signal){ printf("Memory Deallocation\n"); exit(0);} int main(){ signal(SIGINT, &deallocatehandler); signal(SIGTSTP, &deallocatehandler); signal(SIGKILL, &deallocatehandler); while(1){ /** Some code here **/ } } 如果我按ctrl-c或ctrl-z处理程序被调用,但问题是与SIGKILL。 命令kill -9和killall不会启动处理程序。 有人知道为什么吗? 有没有build议来纠正它?

Linux中的非阻塞装载

我在单线程的过程中使用Linux的mount(2)函数。 但是像CD-ROM这样的设备设备的安装可能需要一段时间(最糟糕的是我已经看到了40秒!),因为它会思考一下,旋转磁盘,然后才会挂载文件系统。 这可能会阻止该进程在相当长的时间内处理其他事件。 我似乎无法find一种方式来以非阻塞的方式安装文件系统。 有没有办法asynchronous挂载文件系统没有multithreading或分叉? 知道行动是否完成对我来说不是一个问题,因为我已经在同一个线程中读取了内核uevents。

C程序没有标题

我用C写了“hello world”程序 void main() { printf("Hello World"); } // note that I haven't included any header file 该程序编译时警告为 vikram@vikram-Studio-XPS-1645:~$ gcc hello.c hello.c: In function 'main': hello.c:2:2: warning: incompatible implicit declaration of built-in function 'printf' vikram@vikram-Studio-XPS-1645:~$ ./a.out Hello Worldvikram@vikram-Studio-XPS-1645:~$ 这怎么可能? 操作系统如何链接一个库,而不包括任何头文件?