Articles of c + +

如何存储system()调用的输出?

我在c ++程序中使用Linux system(3) 。 现在我需要将system(3)的输出存储为数组或序列。 我如何可以存储system(3)的输出。 我正在使用以下内容: system("grep -A1 \"<weakObject>\" file_name | grep \"name\" | grep -Po \"xoc.[^<]*\" | cut -d \".\" -f5 "); 这给出了输出: changin fdjgjkds dglfvk dxkfjl 我需要将这个输出存储到一个string数组或string序列。 提前致谢

在Linux上编写multithreadingTCP服务器

在工作中,我负责将TCP服务器作为Modbus从站设备的一部分来实现。 我在堆栈交换和一般的互联网(包括优秀的http://beej.us/guide/bgnet/ )上都做了大量的阅读,但是我正在为devise问题而苦苦挣扎。 总之,我的设备只能接受2个连接,每个连接都会接收到我在主控制器环路中必须处理的modbus请求,然后回复成功或失败状态。 我有如何实现这一点的以下想法。 有一个侦听器线程创build,绑定,侦听和接受连接,然后生成一个新的pthread来监听传入数据的连接,并在空闲超时期限后closures连接。 如果当前活动线程的数量是2,则立即closures新的连接以确保只允许2个连接。 不要从侦听器线程产生新线程,而是使用select()来检测传入的连接请求,以及在活动连接上传入的modbus连接(类似于Beejs指南中的方法)。 创build两个监听器线程,每个监听器线程创build一个可以阻塞accept()调用的套接字(相同的IP和端口号),然后closures套接字fd并处理连接。 在这里,我(可能天真地)认为这将只允许最多2个连接,我可以使用阻塞读取处理。 我一直在使用C ++很长一段时间,但对于Linux开发来说,我还是比较新的。 对于上述哪种方法最好(如果有的话),以及如果我对Linux的经验不足意味着其中任何一个都是非常糟糕的想法,我都非常欢迎。 我渴望避免fork()并坚持pthreads,因为传入的modbus请求将被排队并定期从主控制器循环读取。 预先感谢您的任何build议。

在linux上连接时出现“输出不能代表节”的错误

编译我的Ubuntu 9.04盒子上的webkit-1.1.5软件包时,在链接器阶段出现这个错误: libtool: link: gcc -ansi -fno-strict-aliasing -O2 -Wall -W -Wcast-align -Wchar-subscripts -Wreturn-type -Wformat -Wformat-security -Wno-format-y2k -Wundef -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-unused-parameter -Wno-parentheses -fno-exceptions -fvisibility=hidden -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -O2 -O2 -o Programs/.libs/GtkLauncher WebKitTools/GtkLauncher/Programs_GtkLauncher-main.o -pthread ./.libs/libwebkit-1.0.so /usr/lib/libgtk-x11-2.0.so /usr/lib/libgdk-x11-2.0.so /usr/lib/libatk-1.0.so /usr/lib/libpangoft2-1.0.so /usr/lib/libgdk_pixbuf-2.0.so -lm /usr/lib/libpangocairo-1.0.so […]

如何通过系统库强制使用本地共享库?

我怎样才能强制使用本地库在Linux系统库? 我明确地将我的可执行文件链接到我的项目/ lib目录中的一些.so文件,例如(../lib/libluajit.so)。 在gdb下运行我的可执行文件或使用ldd显示它仍然使用系统libluajit-5.1.so.2 然后我将LD_LIBRARY_PATH设置到我的项目/ lib目录并导出它,然后运行我的可执行文件。 不知何故,它仍然拿起系统库(由gdb和ldd确认) 我想知道这怎么可能,以及我能做些什么来强制它在我的project / lib目录中使用本地的libluajit.so。

glibc – list和其他数据结构实现

我填充像我的谷歌search技能现在很差,无法find在glibc中的列表实现,发现哈希和树实现,但不是一个列表之一。 有没有glibc实现呢? 我不想重新格式化Linux内核链表macros,并在用户空间中使用它们。

如何检测我是否在单一服务?

我怎么能检测到我在mono-service2下运行? (在C#/ .NET 3.5中,在Ubuntu 11上运行mono 2.6.7) Type.GetType("Mono.Runtime")告诉我,我在单声道运行,所以这部分是好的。 但是Environment.UserInteractive在单声道下总是是假的,所以我很难弄清楚我是否在mono-service2下运行 – 没有控制台/terminal。

在Linux上用C ++读取硬盘扇区

你如何用C / C ++读取硬盘扇区? 有一个标准的图书馆,我可以使用或必须下载? 在Windows中,我可以使用CreateFile(…)访问原始磁盘扇区,但我不知道如何在Linux中执行操作。 我在Ubuntu LTS 10.4上使用GCC。 感谢您的帮助。

错误:从'void *'无效转换为'void *(*)(void *)' – pthreads

anisha@linux-y3pi:~> g++ conditionVarTEST.cpp -Wall conditionVarTEST.cpp: In function 'int main()': conditionVarTEST.cpp:33:53: error: invalid conversion from 'void*' to 'void* (*)(void*)' conditionVarTEST.cpp:33:53: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' conditionVarTEST.cpp:34:53: error: invalid conversion from 'void*' to 'void* (*)(void*)' conditionVarTEST.cpp:34:53: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' 第33行是这样的: pthread_create […]

Linux串口读取 – 我可以改变input缓冲区的大小吗?

我正在用Ubuntu C ++编写一个应用程序来从串口读取数据。 它通过调用select()然后ioctl(fd,FIONREAD,&bytes_avail)代码来成功地工作ioctl(fd,FIONREAD,&bytes_avail)在使用read()最终获取数据之前找出有多less字节可用。 我的问题是这样的:每次select返回的数据,可用字节数报告为8.我猜这是一个缓冲区大小设置的地方,并select返回通知给用户,当这个缓冲区已满。 作为一名开发人员,我是Linux的新手(但并不是C ++的新手),我试图研究(没有成功)是否可以改变这个缓冲区的大小,或者甚至假设我的假设是真的。 在我的应用程序中,时序非常关键,每当读取缓冲区中有新字节时,我都需要收到警报。 这是可能的,没有深入研究内核代码?

程序在更新时自动重启

我到处检查,所以我希望不要重复一个问题。 我想为我写的一些C代码添加一个便携更新function。 该程序可能不在任何特定的位置,我宁愿保留它到一个单一的二进制(没有dynamic库加载) 然后更新完成后,我希望程序能够重新启动(不是一个循环,实际上是从硬盘重新加载) 在Linux上有没有办法在C上做到这一点?