Articles of c + +

内存分配失败,即使有足够的内存

我正在使用Linux(正好是Ubuntu 13.04),目前我有一个问题:为什么内存分配将失败,即使有足够的内存? 我今天写了一个简单的testing应用程序,在运行这个testing应用程序时遇到了这个问题 以下是我用来testing的代码片段: #include <stdio.h> #include <unistd.h> #include <list> #include <vector> #include <strings.h> using namespace std; unsigned short calcrc(unsigned char *ptr, int count) { unsigned short crc; unsigned char i; //high cpu-consumption code //implements CRC algorithm: Cylic //Redundancy code } void* CreateChild(void* param){ vector<unsigned char*> MemoryVector; pid_t PID = fork(); if (PID == 0){ […]

在Linux中使用C ++设置系统date和时间

我正在开发跨平台应用程序,将系统date和时间更改为指定的值。 我已经完成了Windows的部分。 我如何从Linux的C++程序设置系统date和时间? 我正在寻找一个类似于SetSystemTime(SYSTEMTIME &x)的函数。 就我所知, settimeofday()对date没有任何作用,我不确定函数stime()的用法。 我希望mktime()与我的需要无关。 有谁能够帮助我。

在linux下访问堆栈下的内存

该程序访问堆栈下的内存。 我会假设得到一个段错误,或者只是当我走出堆栈界限,但我看到实际的数据。 (这是假设100KB以下的堆栈指针超出了堆栈边界) 还是系统实际上让我看到堆栈下面的内存? 是不是应该有内核级别的保护措施,还是只适用于分配的内存? 编辑: 1024*127下面的字符指针它随机段错误或运行,所以堆栈似乎不是一个固定的8MB,似乎也有一点随机了。 #include <stdio.h> int main(){ char * x; int a; for( x = (char *)&x-1024*127; x<(char *)(&x+1); x++){ a = *x & 0xFF; printf("%p = 0x%02x\n",x,a); } } 编辑:另一个奇怪的事情。 第一个程序segfaults只有1024*127但如果我printf向下远离堆栈我没有得到一个segfault和所有的内存似乎是空的(全0x00 ): #include <stdio.h> int main(){ char * x; int a; for( x = (char *)(&x); x>(char *)&x-1024*1024; x–){ a […]

readlink systemcall做什么?

我无法理解Linux中“ readlink ”系统调用的操作。 任何人都可以用简单的例子来解释它吗?

如何避免不能使用命名空间std; 在C ++中

我在尝试将我的C ++源代码从HP-UX移植到Linux时遇到了此问题。 当我尝试在Linux上编译C ++源代码时,会发生什么,它抱怨组件(来自标准C ++库)不存在。 放置行使用名称空间标准; 在源代码的顶部似乎解决了这个问题。 当我尝试重新编译HP-UX上的代码时,aCC编译器会抱怨只有命名空间名称在这里有效(它不认为是有效的命名空间)。 我想知道是否有办法解决这个问题,以便源代码与HP-UX的长期弃用的C ++编译器和LINUX的GCC编译器二进制兼容。

在同一个系统上有多个GCC的情况下使用哪个版本的libstdc ++。so

我正试图安装gcc 4.8安装和使用当前gcc 4.3系统。 我做了一些研究,知道可以保留多个版本的gcc。 对我来说,使用–program-suffix =选项对我来说是最好的解决scheme。 但我的问题是,我可以安装新的gcc 4.8直接到旧gcc安装的地方? 两个版本的库可以混合在同一个lib目录中吗? 更多细节:旧的gcc安装在/ usr / bin / usr / lib64中。 如果我直接安装新的gcc到相同的位置,新的库也将被安装/ usr / lib64。 这是一个问题吗? gcc编译器知道链接时使用哪个库? 提前谢谢了!

是否有可能解决CUDA内存碎片问题?

我试图分配一些内存,但有时会出现“内存不足”的错误。 cudaMemGetInfo说,我需要更多的内存。 所以,在内存碎片问题。 是否有可能解决这个问题? 是否有可能将元素放在记忆中而不是一个接一个地将它们分解成less量的可以放在记忆中的和物?

我将如何去写一个Linux的TTY嗅探器?

为了教育的目的(不是任何人都应该关心这样的练习背后的动机),我想写一个程序,可以读/写/从备用ttys / ptys。 我读过(从20世纪90年代)的文章,但不能使用他们在现代Linux / glibc上使用的实现 我希望过去有人研究过这个(不太远),或者至less是阅读有关的文档,他们可以提供,这会进一步启发我。 我还想知道,如果这个练习必须通过一个可加载的内核模块[lkm]来完成(考虑到Linux没有stream的事实)。 我有很多问题,可能是一些基本的意识形态的误解,使这样的目标能够落实到位,有人可以帮忙吗? 🙂

使用C / C ++的POSIX物理磁盘块大小

我正在研究一个高性能的I / O程序,我试图find用C ++来确定设备的磁盘块的物理 (而不是逻辑 )字节大小的最佳方法。 到目前为止,我的研究已经让我看到下面的代码片段: #include <iostream> #include <sys/stat.h> #include <stdio.h> #include <errno.h> int main(int argc, char ** argv) { // file information including block size of the device struct stat info; // device to get block size from char * device = "/mnt/hdb1"; if (stat(device, &info)) { printf("stat() error"); strerror(errno); exit(1); } […]

fork()和scanf()如何一起工作?

我试图看看,如果我从键盘读取的东西,而我有多个进程与fork()(在我的情况下,有两个孩子和父母),我发现了以下问题会发生什么:我需要告诉父母等待孩子的进程,否则程序performance奇怪。 我做了一个研究,发现问题出在父母身上,他需要等待孩子的过程结束,因为如果父母的过程首先结束,那么他会closuresSTDIN,对吗? 但是我也发现每个进程都有一个STDIN的副本,所以我的问题是: 为什么它这样工作,为什么只有父母有STDIN和孩子没有问题,我的意思是为什么如果孩子的过程首先结束不影响STDIN,但如果父母的过程首先结束,它会影响STDIN? 这是我的testing: 我没有等待()运行程序,并input一个数字后,程序停止,但后来我再次input两次,另外两个来自printf()的消息出现。 当我用wait()运行程序时,一切正常,每个进程分别调用scanf()并读取一个不同的数字。