Articles of Linux操作系统

通过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 […]

ISQL命令导致:无法在Ubuntu Linux上使用unixODBC和Pervasive Client打开lib'odbcci.so'

我无法弄清楚如何通过ODBC从Ubuntu Linux 64bit连接到Windows Server计算机上的Pervasive数据库 。 我从这里安装了unixodbc ,然后安装了32bit Pervasive Client 11sp2 ,把tar内容移到/ usr / local / psql,然后执行clientpreinstall.sh和clientpostinstall.sh我做了dsnadd命令,添加了dba源文件。 现在,如果我尝试使用isql -v dbatestingODBC连接,则会出现以下结果: [ISQL]错误:无法SQLConnect [01000] [unixODBC] [驱动程序pipe理器]无法打开lib'/usr/local/psql/lib/odbcci.so':文件未find odbcci.so存在于该目录中。 我该怎么做才能使它工作?

如何在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 […]

基于Qt的应用程序二进制兼容性问题,由于glibc版本

我在使用glibc 2.15的ubuntu 12.04 LTS上开发和构build基于QT的应用程序。 应用程序的二进制版本在一些Linux发行版上运行,但不在其他版本上运行。 其中一个主要问题是不同版本的glibc与不同的linux发行版所引起的兼容性问题。 例如,它不适用于使用glibc 2.12的centos或使用glibc 2.10的警惕小狗。 有没有办法在Ubuntu 12.04 LTS上构build一个更低版本的glibc的QT? 还是必须切换到较低版本的Ubuntu才能完成所有的开发?

Linux:程序A运行程序B,杀死A,replaceA,然后重新启动A – 带有inheritance的打开文件描述符的问题

我有一个服务器进程,这个服务器进程可以给一个命令来更新自己。 它所做的是存储更新,然后使用system()在后台运行更新脚本。 更新脚本杀死父进程,删除二进制文件,replace它,然后重新启动它。 由于各种原因,重新启动的进程失败,因为我试图debugging它,但这次是因为我正在尝试分配的TCP端口已被使用。 我猜测,subprocessinheritance了打开的端口,然后由更新的服务器进程inheritance,因此,该端口不是空闲的进程再次分配。 更新脚本启动的方式是这样的: system("/usr/local/bin/update_script.sh > /dev/null 2>&1 &"); 然后脚本做到这一点: killall server_process rm /usr/local/bin/server_process cp /tmp/update/server_process /usr/local/bin server_process > /dev/null 2>&1 & 有关我如何做这项工作的任何build议? 有什么办法可以分离更新脚本,以便在执行更新之前服务器进程不再是其父进程? 或者让subprocess不inheritance父进程的任何资源? 谢谢。 附录:解决方法是在每个打开的文件描述符上设置FD_CLOEXEC 。 不幸的是,其中一些fd被埋在图书馆里,我不得不认真的破解FD_CLOEXEC 。 不知何故,我需要使FD_CLOEXEC默认。 或者我需要做一些激烈的事情,比如迭代所有打开的fd(如何?)并设置FD_CLOEXEC 。

我如何让树莓派直接启动浏览器?

我在/etc/bash.bashrc文件中放入了以下行: chromium–kiosk www.bbc.co.uk 然而,我然后在启动时得到一个错误: "(chromium:2100): Gtk-WARNING **: cannot open display:" 如果我将Pi设置为在启动时启动到操作系统,它不会显示铬,但是如果我启动一个terminal窗口,它会突然在Kiosk模式下打开铬并显示指定的网页! 我究竟做错了什么?

在PHP和进程之间使用命名pipe道的任何可预见的限制?

我想写一个PHP文件,将命令pipe道系统(但也处理标准input,使交互式程序也可以使用)。 我已经读过,这不能在PHP中完成,所以我写了一个C程序设置2 fifos(进/出)。 我已经在以下意义上进行了testing: (开放3个terminal) terminal1:设置pipe道的./程序terminal2:cat fifo_outterminal3:echo“ls -l”> fifo_in 这将显示在terminal2.我将很快在C程序中实现stdin。 所以从PHP文件我打算发送命令和pipe道回应(包括最终处理stdin)。 是否有任何我应该知道的“陷阱”会使这个不可行? (例如,PHP没有处理这样的程序之间的命名pipe道,或有超时或许可等?有任何build议,以避免这种陷阱? 提前致谢

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

我试图测量一个线程唤醒睡眠线程时的延迟。 由于据说许多同步前体是在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; […]

我如何让一个瑞士法郎玩家在Linux上工作?

我有一个网站,我需要播放特定于列表的MP3文件。 该文件需要在相同的浏览器窗口中播放(来自客户端的指令)。 我发现了一个js / swf播放器( WordPress Audio Payer独立版本 ),可以在我的本地机器(运行WAMP的Windows)上运行,但是当我将它发送到活动服务器(Linux和Apache)时,它会持续地缓冲并不能播放。 我发现一个网站,说我需要修改htaccess文件来识别闪存媒体。 这就是它所说的补充,我做了没有改善。 # Macromedia tells the server how to deal with swf files AddType application/x-shockwave-flash swf AddType audio/mpeg mp3 我究竟做错了什么?