Articles of c + +

比stat()在dir中查找文件更好的方法?

我试图找出某些文件是否在某个文件夹中。 但是,即使文件存在,我试图find它们的方式在某些文件夹中不起作用。 bool FileExists(string strFilename) { struct stat stFileInfo; bool blnReturn; int intStat; intStat = stat(strFilename.c_str(),&stFileInfo); if(intStat == 0) { // We were able to get the file attributes // so the file obviously exists. blnReturn = true; printf("Found file %s\n", strFilename.c_str()); } else { blnReturn = false; printf("Didn't find file %s\n", strFilename.c_str()); } return(blnReturn); […]

自动打印GDB中最后一个expression式的值,如VisualStudio的“自动”观察窗口

VisualStudio的debugging器有一个称为自动窗口的function,它总是显示当前和以前的expression式的值。 有没有办法在GDB中实现类似的行为,特别是对于C ++应用程序? 我知道GDB中的display和commands命令,但它们似乎并不是我正在寻找的。 在VS中,debugging器会自动计算出要评估哪个expression式,然后通过程序的每一步对其进行评估。 这个function – 自动找出要评估的expression式 – 是我想让GDB做的事情。 例如,假设我正在执行此代码: #include <cstdlib> #include <iostream> #include <iomanip> #include <sstream> using namespace std; int main() { string s = "Hello"; s += "World"; int i = 2; i *= 3; i *= 7; stringstream ss ; ss << "The result is " << i << "!\n"; […]

在OSX和Ubuntu上构build修补的64位OpenSSL

我正在尝试设置OpenSSL的补丁版本来使用DTLS,我遇到了很多麻烦。 我假设这是由于我不了解gcc和链接c库。 特别是,我不断看到人们说,链接到lib /子文件夹,但我找不到一个OpenSSL。 我也是一个关于构build32位OpenSSL的问题 ,但我正在尝试做64位。 OSX 获取源代码和补丁: wget ftp://ftp.openssl.org/source/openssl-1.0.1c.tar.gz # get latest stable OpenSSL mv ~/Downloads/openssl-1.0.1c.tar.gz /usr/local/openssl-1.0.1c.tar.gz cd /usr/local/openssl-1.0.1c.tar.gz wget http://sctp.fh-muenster.de/dtls/dtls-bugs-1.0.1.patch # get the patch file build设(64位,OpenSSL默认为32位): export CFLAGS="-arch x86_64" export LDFLAGS="-arch x86_64" ./Configure darwin64-x86_64-cc # 64 bit config command make # .a files should be built, great 太好了,我在OpenSSL根目录下有一些库: /usr/local/openssl-1.0.1c$ ll lib* -rw-r–r– 1 […]

通过USB指令步进电机控制器

我试图在Gnu / Linux上的Trinamic StepRocker步进电机控制器上做一些实验。 我以前曾通过USB将设备连接到Windows机器,并使用Trinamic的专有软件来testing控制器是否按预期工作,似乎是这样。 StepRocker的初学者手册提到了某些应该通过串行接口发送的命令来左右旋转电机,或者使其停止。 但是当我通过USB连接这个控制器到一个Gnu / Linux计算机,并且想要编写我自己的C ++(libusb)程序来使电机移动时,我不太清楚我的出发点应该是什么。 控制台应用程序(我打算写)应该是非阻塞的。 下面是一个发送数据报的图像和发出旋转命令时收到的响应: 我试图编写一个简单的程序,将图片中显示的旋转值数据报送入电机控制器: #include <stdio.h> #include <string.h> #include <fcntl.h> #include <errno.h> #include <termios.h> #include <unistd.h> int fd1; int wr; int main() { fd1=open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd1 == -1 ) { perror("open_port: Unable to open /dev/ttyACM0"); } else { fcntl(fd1, F_SETFL,0); printf("Port […]

如何在C ++中使用inheritance对类进行序列化

我想序列化一个类是inheritance的一部分。 我正在使用C ++ 98,没有第三方库。 这是我的class级结构: class Base{ public: virtual RunMe()=0; }; class Derived: public Base{ virtual RunMe(){ std::cout << "I am running << std::endl; } }; 我能够通过朋友技术使用ofstream和fstream序列化一个基本的类。 但我不知道如何实现序列化的情况下,我的基类有一个纯虚函数。

Qtembedded式触摸屏QMouseEvents没有收到,直到MouseButtonRelease收到

我在一个带有触摸屏的小型ARMembedded式Linux设备上使用Qt 4.8.3。 我的触摸屏configuration了tslib并进行了校准,因此在/ etc /中有一个pointercal文件。 我的触摸事件的位置工作正常,但无论我在鼠标按下或鼠标释放事件之前获得鼠标移动的QEvent。 此外,我没有得到任何鼠标相关的事件,直到我的手指从触摸屏举起。 我需要在触摸屏上按下正常行为,并立即收到鼠标放下事件,然后移动事件(如果有的话),然后当我举起我的手指时发生鼠标释放事件。 So what I'm seeing from the point of view of events received when I pressed down and then release looks like: 50 SockAct <– Received right at press down <– NO Other events received until press released <– Now release by lifting finger from screen 50 SockAct […]

如何在一个线程上花费比互斥体更长的时间?

我试图测量一个线程唤醒睡眠线程时的延迟。 由于据说许多同步前体是在futex之上开发的,我期望futex总是更快。 但是,我的testing结果是相反的。 我想知道我做错了什么,或者它实际上是一个事实。 这是我testing的细节: 进程已经被设置为一个特定的核心 时间由RDTSC()指令返回的数字进行比较 创build2个线程,其中醒来的线程2具有较高的FIFO优先级 线程1通过解锁互斥体来发送信号,所以线程2应该在下一个时间表中唤醒。 thread1上的sleep(1)是为了确保在调用mutex_unlock的时候thread2正在等待互斥量。 void *Thread1(void *dummy) { while(1) { pthread_mutex_lock( &mutx ); sleep(1); t1 = rdtsc(); pthread_mutex_unlock( &mutx ); pthread_yield(); } return NULL; } void *Thread2(void *dummy) { while(1) { pthread_mutex_lock( &mutx ); t2 = rdtsc(); if(t1>0) { // print out the result cout << t2-t1 << endl; […]

在Raspberry Pi的Linux环境中出现Windows Forms错误

我已经开发了完全在Windows中工作的完整应用程序。 我现在已经在Linux(Debian on RPi)上安装了mono,并且正在执行该应用程序。 第一种forms(login表单)加载完全正常。 在此表单上input用户详细信息,如果详细信息正确,则应closures该表单并打开下一个表单。 下面的代码是从login表单,并执行一次我按“login”: this.Hide(); Entry_System fm = new Entry_System(); fm.ShowDialog(); this.Show(); 但是,在Linux中,表单只是closures并发生以下错误: System.TypeLoadException:发生types加载exception。 System.Windows.Forms.Control.OnClick(System.EventArgs e)[0x00000] in:System.Windows.Forms.Button.OnClick(System.EventArgs e)中的0; System.Windows.Forms中的[0x00000] in:0 .ButtonBase.OnMouseUp(System.Windows.Forms.MouseEventArgs mevent)[0x00000] in:0 System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs mevent)[0x00000] in:0 at System.Windows .Forms.Control.WmLButtonUp(System.Windows.Forms.Message&m)[0x00000] in:0 System.Windows.Forms.Control.WndProc(System.Windows.Forms.Message&m)[0x00000] in:0 at System .Windows.Forms.ButtonBase.WndProc(System.Windows.Forms.Message&m)[0x00000] in:0 at System.Windows.Forms.Button.WndProc(System.Windows.Forms.Message&m)[0x00000] in:0 System.Windows.Forms.Control + ControlWindowTarget.OnMessage(System.Windows.Forms.Message&m)[0x00000] in:0 at System.Windows.Forms.Control + ControlNativeWindow.WndProc(System.Windows.Forms.Message&m) System.Windows.Forms.NativeWi中的<filename unknown>中的[0x00000]:0 ndow.WndProc(IntPtr hWnd,Msg msg,IntPtr […]

使用驱动程序获取原始MAC地址

Linux:uname -a:2.6.18以及2.6.39 我是非常新的…当驱动程序第一次加载时,ifconfig可以改变MAC地址之前,现有的(永久)MAC地址被存储,可以通过这个ioctl检索。 case ETHTOOL_GPERMADDR: rc = ethtool_get_perm_addr(dev, useraddr); break; 任何人都testing过它? 我可以获得代码或代码的一部分来实现它吗?

系统+ usleep +multithreading= SEGV / SIGILL

我正在使用内核版本2.6.10和“普通”C. 我已经缩小到两个线程为什么我们的程序崩溃。 定时器线程 void TimerThread(void) { while (exec) { usleep(10000); RSLTCD r = SUCCESS; // r = LockMutex(Mtx); do { // some process } while(1); // r = UnlockMutex(Mtx); } return ; // Not Reached } 系统线程 void SystemThread(void) { CreateThread(TimerThread, OALTHRD_DEFAULT_STACKSIZE, THREADPRI_NORMAL, 0, 0); for(;;){ system("echo this is a SYSTEM CALL 1"); system("echo this […]