Articles of Linux操作系统

Raspbian上的蓝牙LE

我使用以下configuration从源代码安装了bluez-5.15: $ ./configure –prefix=/usr –mandir=/usr/share/man –sysconfdir=/etc \ –localstatedir=/var –libexecdir=/lib –disable-systemd 然后,我必须手动将gatttool复制到/ usr / local / bin目录中 $ sudo cp attrib/gatttool /usr/local/bin/ 我重新启动了树莓派,并尝试以下连接到我的BLE设备: $ sudo hciconfig hci0 up $ sudo hcitool lescan LE Scan … EA:FB:B5:CE:B0:13 DfuTarg $ sudo hcitool lewladd EA:FB:B5:CE:B0:13 $ sudo hcitool lecc EA:FB:B5:CE:B0:13 Could not create connection: Input/output error 那么我试着用gattool连接: $ gatttool […]

UDP数据包由linux内核丢弃

我有一个服务器,通过多播发送UDP数据包和一些列表到这些多播数据包的客户端。 每个数据包的固定大小为1040字节,服务器发送的全部数据量为3GB。 我的环境如下: 1千兆比特以太网 40个节点,1个发送者节点和39个接收器节点。 所有节点具有相同的硬件configuration:2个AMD CPU,每个CPU有2个2.6GHz的内核 在客户端,一个线程读取套接字并将数据放入队列中。 一个额外的线程从队列中popup数据并执行一些轻量级处理。 在组播传输期间,我认识到节点端的丢包率为30%。 通过观察netstat -su统计信息,我可以说,客户端应用程序丢失的数据包等于netstat输出中的RcvbufErrors值。 这意味着所有丢失的数据包都被操作系统丢弃,因为套接字缓冲区已满,但我不明白为什么捕获线程无法及时读取缓冲区。 在传输过程中,4个核心中的2个被利用了75%,其余的正在睡觉。 我是唯一一个正在使用这些节点的人,而且我认为这种机器在处理1Gbit带宽方面没有问题。 我已经做了一些优化,通过为amd cpus添加g ++编译器标志,这将数据包丢失率降低到10%,但是在我看来,它仍然太高。 当然我知道UDP是不可靠的,我有自己的修正协议。 我没有任何pipe理权限,因此我无法更改系统参数。 任何提示如何提高性能? 编辑:我解决了这个问题,使用2线程正在读取套接字。 有时recv套接字缓冲区仍然变满。 但平均下降不到1%,所以处理它不是问题。

如何使用大括号扩展的variables

我有四个文件: 1.txt 2.txt 3.txt 4.txt 在linux shell中,我可以使用: ls {1..4}.txt来列出所有的四个文件,但是如果我设置两个variables:var1 = 1和var2 = 4,如何列出这四个文件? 那是: var1=1 var2=4 ls {$var1..$var2}.txt # error 什么是正确的代码?

CUDA和固定(页面locking)内存不是页面locking?

我试图弄清楚CUDA(或OpenCL实现)是否在需要固定(页面locking)的内存时说实话。 我试着cudaMallocHost并看着/proc/meminfo值Mlocked和Unevictable ,都停留在0,永远不会( /proc/<pid>/status报告VmLck也为0)。 我用mlock来locking页面内存,并按照预期值上升。 所以这种行为的两个可能的原因可能是: 我没有从CUDA API获取页面locking内存,并且cudaSuccess是假的 CUDA绕过了页面locking内存的操作系统计数器,因为CUDA在Linux内核方面有一些神奇的function 所以实际的问题是:当我使用CUDA分配页面locking内存时,为什么我无法从操作系统获取页面locking内存的值? 另外:如果不是从/proc/meminfo或/proc/<pid>/status我可以在哪里得到正确的值? 谢谢! 系统:Ubuntu 14.04.01 LTS; CUDA 6.5; Nvidida Driver 340.29; Nvidia Tesla K20c

如何杀死在c + +的过程,只知道它的名字的一部分

前段时间我需要编写c ++代码来杀死一些进程。 在我的主程序中,我使用系统(“…”)在input上运行带有不同文件名string的大型CAE系统软件包。 CAE软件创build了许多进程,包含进程名string文件名 )。 一些CAE进程worktime > max_time ,比我需要closures他们: //filename contains part of CAE-process name string s="/bin/kill -9 `ps aux | grep "+filename+" | awk {'print $2'}`"; system(s.c_str()); 输出是: Usage: kill pid … Send SIGTERM to every process listed. kill signal pid … Send a signal to every process listed. kill -s signal pid … […]

如何访问timeval结构的字段

我试图打印struct timevalvariables中的值,如下所示: int main() { struct timeval *cur; do_gettimeofday(cur); printf("Here is the time of day: %ld %ld", cur.tv_sec, cur.tv_usec); return 0; } 我不断收到这个错误: 请求成员“tv_sec”在某些不是结构或联盟。 请求成员“tv_usec”的东西不是一个结构或联盟。 我怎样才能解决这个问题?

与GDB远程debugging错误

我试图远程debuggingx86_64 suse linux上的32位应用程序,但得到这个“远程寄存器格式错误”的错误。 我启动gdbserver侦听端口12345(gdbserver localhost:12345 my_prog) 这是错误的: $ gdb GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely […]

如何将环境设置导入到我的Perl程序中?

我有一个脚本,其内容只是在linux中导出一个variables。 export LD_LIBRARY_PATH=…. 我想在我的Perl脚本中运行这个脚本,这样任何运行我的Perl脚本的人都将设置它们的LD_LIBRARY_PATH 。 我可以在我的Perl脚本的开始执行此操作: #!/usr/bin/perl -w system(". /myfolder1/myfolder2/myScript.sh");

捕获直接redirect到/ dev / tty

我正在为一个将文本直接分发到/ dev / tty的程序的应用程序控制器工作。 这是一个生产应用程序控制器,必须能够捕捉到terminal的所有文本。 一般来说,这不是一个问题。 我们只是redirectstdout和stderr。 这个特定的应用程序直接调用echo并将结果redirect到/ dev / tty( echo "some text" > /dev/tty )。 通过我的应用程序控制器redirect没有抓住文本。 我确实有这个应用程序的来源,但是我不能修改它,也不能再维护它。 有关如何捕捉和/或丢弃输出的想法?

C调用约定并传递参数

在Linux(或OS X)中进行函数调用时,被调用者是否可以修改堆栈中参数的值? 我是在这样的假设下,因为调用者是清理它们的那个,所以在函数调用之后它们应该包含相同的值。 但是我发现使用-O2的GCC正在修改传递给堆栈的参数。 我还查找了包括System V i386调用约定的文档,但无法find明确的答案。 这是我正在debugging的一些示例代码。 pushl %eax # %eax = 0x28 call _print_any popl %eax # %eax is now 0x0a 我会假设GCC修改堆栈上的参数是好的,但我想知道它在哪里指定它可以这样做。