Articles of c + +

获取不能分配内存错误

我在我的程序中得到这个错误… mprotect: Cannot allocate memory ulimit -a给出输出: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX […]

使用pipe道编写gzipped输出文件,无需额外的磁盘空间

我有以下实现的function,用于读取没有磁盘使用gzipped文件。 #include <fstream> #include <stdlib.h> // for mkstemp() and std::system() #include <memory> #include <errno.h> #include <cassert> #include <unistd.h> // for ::close() and unlink() void foo (std::ifstream& in, std::string& fileName) { char tmpName[] = "/tmp/tmp.XXXXXX"; const int fileDescriptor = mkstemp(tmpName); if (fileDescriptor >= 0) { std::string tmpFileName (tmpName); ::close(fileDescriptor); unlink(tmpFileName.c_str()); std::string cmd= "mkfifo " + tmpFileName; […]

订购两个线程的执行

我想写两个线程,第一个将从控制台读取一个string,第二个将输出字符数。 为此,我必须设置执行线程的顺序,先读后写。 另外我想要一个线程执行。 我怎样才能做到这一点? #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *printCharacterNumber(void *ptr); void *readMessage(void *ptr); int main() { pthread_t thread1, thread2; int iret1, iret2; iret1 = pthread_create(&thread1, NULL, printMessage, NULL); iret2 = pthread_create(&thread2, NULL, printCharacterNumber, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); return 0; } void *readMessage(void *ptr) { char *message; fscan("%s", &message); } void *printCharacterNumber(void […]

如何从使用:: dlopen打开的库中获取dynamic加载库的名称?

在Windows中可以使用GetModuleFileName。 那么Linux呢?

为什么我得到这个错误:解除指向不完整types的指针

我正在为一个类的项目工作,可能是WORST指令,我们必须实现一个简单的调度程序..虽然C编程不是课程的先决条件,这是调度程序的语言,我不一定是C程序员.. 无论如何,我试图通过打印出任务来debugging,以便我可以通过程序跟踪它,但我不断收到以下编译时错误: schedule.c:61:48:错误:取消引用指向不完整types的指针 这是task_struct定义: struct task_struct { struct thread_info *thread_info; int prio, static_prio, normal_prio; unsigned long sleep_avg; unsigned long long last_ran; unsigned long long timestamp; unsigned long long sched_time; unsigned int time_slice, first_time_slice; struct list_head run_list; struct sched_array *array; enum sleep_type sleep_type; int need_reschedule; }; 我试图在里面debugging的function: void initschedule(struct runqueue *newrq, struct task_struct *seedTask) { printf("Inside […]

如何用D-Bus获取设备名称?

我在Linux上用C ++开发了一个应用程序,它与蓝牙设备(如蓝牙套接字或扬声器)进行交互。 我使用D-Bus命令来获取配对设备的列表: dbus-send –system –dest=org.bluez –print-reply $BTADAPTER org.bluez.Adapter.ListDevices 它返回: method return sender=:1.0 -> dest=:1.90 reply_serial=2 array [ object path "/org/bluez/489/hci0/dev_00_1F_C5_75_45_5E" object path "/org/bluez/489/hci0/dev_F0_13_C3_00_A1_08" object path "/org/bluez/489/hci0/dev_00_11_12_30_76_21" object path "/org/bluez/489/hci0/dev_00_11_12_30_76_22" object path "/org/bluez/489/hci0/dev_00_11_12_30_76_23" object path "/org/bluez/489/hci0/dev_00_11_12_30_76_24" ] 这是伟大的,但我不仅需要MAC,但也需要设备的名称(如“linvor”或“GT-I9300”)。 请帮助我一个正确的方式来获得这些名字。

从C传递参数到64位Linux大会

我试图写我的第一个汇编函数从C程序中调用。 这是.c部分: #include <stdio.h> extern int sum(int a, int b); int main() { printf("2+3 = %d\n", sum(2,3)); return 0; } 和汇编部分: .text .global sum sum: push %rbp mov %rsp, %rbp mov 8(%rbp), %rax add 12(%rbp), %rax pop %rbp ret 根据一些教程,参数应该存储在%ebp(32位版本)寄存器中。 但是,当我编译上面的代码,我得到这个结果: 2+3 = 4195607 有人能解释我在做什么错吗? 哦,这里是Makefile: test: test.o testc.o gcc -o test test.o testc.o test.o: […]

gdbserver跟随孩子

我正在尝试在远程主机上debugging分叉进程,但是每次退出subprocess时都要让gdbserver进程结束。 试图在.gdbinit中设置“后续分支模式子”,没有帮助。 有这个好的解决scheme吗? 谢谢。

Linux C:类似shell的环境 – 个别执行 – C命令? (C口译员)

对不起,如果这个问题措辞错误 – 我不知道我要求的正确的话! 🙂 说,你有一些简单的C程序,如: #include <stdio.h> int main() { int a=2; printf("Hello World %d\n", a); return 0; } 通常情况下,这将不得不被保存在一个文件(比如, hello.c ); 那么我们在源文件上运行gcc并获得可执行文件 – 如果我们编译了debugging信息,那么我们可以在可执行文件上使用gdb来遍历代码行,并检查variables。 我想要的是基本上某种“C”shell – 类似于Pythonshell; 从某种意义上说,我可以在一个文件(一个脚本)中拥有一系列Python命令 – 或者我可以将相同的命令粘贴到shell中,并执行相同的命令。 关于上面这个简单的程序,这是我希望能够做到的( C>代表想象中的提示): C> #include <stdio.h> (stdio.h included) C> int a=2; C> printf("Hello World %d\n", a); Hello World 2 C> 换句话说,我希望能够交互地执行单个C命令( 我猜这会代表即时编译的sorting? )。 最初,我被C shell […]

设置QGroupBox标题的alignment方式

我尝试以编程方式设置QGroupBox的标题alignment方式。 根据文档,我尝试按照以下方式进行: MainWidget::MainWidget (QWidget * parent) : QWidget (parent) { setWindowTitle (tr ("QGropBox Title Alignment issue") ); QGroupBox * group = new QGroupBox ("Group Title", this); QVBoxLayout * layoutTop = new QVBoxLayout (); layoutTop->addWidget (group); group->setAlignment (Qt::AlignHCenter); this->setLayout (layoutTop); } 但是我得到了意想不到的结果,并且标题与组框左侧一致。 我对环境有这样的行为: Debian 9.0(sid); Qt 5.5.1(从仓库安装); XMonad DE。 我对下一个环境也有同样的行为: Ubuntu 15.10; Qt 5.4(使用offline-installer手动安装); KDE。 但! […]