Articles of Linux操作系统

如何使用克隆系统调用分配新的TLS区域

问题的短版本:如果我想为我正在创build的线程分配一个新的TLS区域,则需要在x86_64 Linux系统上传递给clone系统调用的参数。 长版本 : 我正在研究一个研究项目,对于我正在做的一些尝试,我想用clone系统调用来创build线程,而不是使用pthread_create 。 不过,我也希望能够使用线程本地存储。 我现在不打算创build多个线程,所以我可以为我使用克隆系统调用创build的每个线程创build一个新的TLS区域。 我正在查看clone的手册页,它包含有关TLS参数标志的以下信息: CLONE_SETTLS (since Linux 2.5.32) The newtls argument is the new TLS (Thread Local Storage) descriptor. (See set_thread_area(2).) 于是我看了set_thread_area的手册页,注意到以下看起来很有希望的内容: When set_thread_area() is passed an entry_number of -1, it uses a free TLS entry. If set_thread_area() finds a free TLS entry, the value of u_info->entry_number is set upon […]

如何用QEMU和KGDBdebuggingLinux内核?

我已经能够使用以下方式启动一个基于powerpc的系统(MPC8544DS具体)来调用qemu(v1.7.0) qemu-system-ppc -M mpc8544ds -m 512 -kernel zImage -s -nographic -initrd busyboxfs.img -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyS0,115200 kgdbwait" 其中zImage是一个自定义交叉编译的Linux Kernel(v2.6.32),它已经启用并编译了KGDB(用于启动代码debugging),而busyboxfs.img是基于busybox的rootfs。 因为我使用-s标志到Qemu,所以我可以使用cross gdb插入到内核中,如下所示: (gdb) target remote localhost:1234 Remote debugging using localhost:1234 mem_serial_in (p=<value optimized out>, offset=5) at drivers/serial/8250.c:405 405 } 但是,如果我删除-s标志并试图通过/dev/ttyS0破解内核,它会给我一个权限被拒绝的错误: (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0 permission denied 是因为它被Qemu所控制吗? 另外,在互联网上的例子中,kgdboc已经被设置为ttyAMA0 ,我已经理解了代表AMBA总线,这是基于ARM的系统特有的。 我们有类似的PowerPC吗? 我在这里做错了什么?

使用curl 7.33.0的–http2.0选项提供不受支持的协议

我使用的是centos 6.2,我需要在服务器请求中使用curl —http2.0,但是在看了http://curl.haxx.se/docs/manpage.html给出的7.19.6后我说–http2.0选项只支持curl 7.33.0,所以为了克服这个问题,我已经安装curl 7.33.0按照http://www.linuxfromscratch.org/blfs/view/svn /basicnet/curl.html安装curl后,我试图使用,但它仍然给我的错误作为curl(1):不支持的协议 ,我检查了我的curl版本使用: curl –version这是给我 : curl 7.33.0 (x86_64-unknown-linux-gnu) libcurl/7.33.0 OpenSSL/1.0.0 zlib/1.2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz 我需要使用这个–http2.0,但没有得到任何事情,我怎么能做到这一点? 由于curl7.19被安装,并且我重新安装更高版本的curl,这是否有任何问题?

单声道替代名为Mutex

在Windows / .NET上,可以使用命名的Mutex来同步多个进程。 不幸的是,Mono在Linux上不太支持。 他们的发行说明说,Linux不支持这个Windowsfunction,它将是不可靠的模拟它。 无论如何,似乎最好避免build议的入侵。 那么有什么build议的select? 我需要使我的程序安全地同时运行,只有一小段需要与其他实例同步。 该应用程序最终需要部署在Ubuntu Linux与Mono 2.10,但为了testing,将不胜感激,如果它也适用于.NET 4的Windows 7。

如何使用具有Boost Asio套接字的特定networking接口/ Ip?

我有一个Debian / Linux服务器有几个IP地址,全部分配到同一个物理网卡。 /etc/network/interfacesconfiguration文件看起来像这样(xx代表数字) auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 176.xx.xx.144 netmask 255.255.255.0 network 176.xx.xx.0 broadcast 176.xx.xx.255 gateway 176.xx.xx.254 auto eth0:0 allow-hotplug eth0:0 iface eth0:0 inet static address 46.xx.xx.57 netmask 255.255.255.255 broadcast 46.xx.xx.57 auto eth0:1 allow-hotplug eth0:1 iface eth0:1 inet static address 94.xx.xx.166 netmask 255.255.255.255 broadcast 94.xx.xx.166 //IPv6 […]

检查RPM依赖关系

在Ubuntu上使用.deb软件包安装编程时,可以使用Ubuntu软件包search来检查软件包的依赖关系。 例如,我可以从这里看到Wireshark的依赖关系。 正如你所看到的,由红色子弹标记的依赖关系。 如果你知道所有的程序包依赖于你,你可以下载它们并安装dpkg 。 有没有其他的RPM软件包的网站? 特别针对RHEL? 我知道我可以通过其他方法获得这些软件包的名字,比如使用rpm -i安装RPM软件包,但是这不是用户友好的,需要访问运行linux。

系统dbus不允许使用conf文件冲出所有权

我正在尝试创build一个在系统总线上运行的守护程序服务,在这个服务中,发送和接收这个服务的权限应该完全公开给任何人。 (安全不是这项服务的关注)。 当我尝试使用QtDbus(使用PyQt)注册服务时,出现以下错误:由于configuration文件中的安全策略,“Connection”:1.0“不允许拥有服务”org.dbus.arduino“ 。 这个其他堆栈溢出具有相同的错误,但由于某种原因在这种情况下根本没有帮助。 dbus_bus_request_name():不允许连接拥有该服务 。 通常情况下,你应该离开system.conf文件,并在system.d目录中添加你的权限“打出”configuration文件。 我已经这样做了,但似乎没有改变任何东西,无论我如何开放权限。 事实上,我几乎是积极的,不改变任何东西! 这是我的conf文件,因为它现在是正确的。 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy user="myUser"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" log="true"/> </policy> <policy user="root"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" log="true"/> </policy> <policy context="default"> </policy> </busconfig> 即使我做了这样或那样的事情,它仍然不起作用。 <busconfig> <policy context="default"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" […]

试图只删除非ASCII字符

我试图操纵一个文本文件,并从文本中删除非ASCII字符。 我不想删除该行。 我只想删除有问题的字符。 我正试图让下面的expression式工作: sed '/[\x80-\xFF]/d'

为什么我会在一个terminal上获得“暂停(tty输出)”,而在其他terminal却不能?

显然,我在tcsh shell中做了一些奇怪的事情,现在每当我在后台打印标准输出的应用程序被暂停(停止)的时候。 奇怪的是,这种行为只发生在这个terminal上; 如果我在另一个terminal上做同样的事情,应用程序只是在后台运行,并将其输出到terminal。 在“破”的terminal,我必须把暂停的应用程序回到前台(与fg )让它继续。 例: thehost:/tmp/test1(277)> ls -l & [3] 1454 thehost:/tmp/test1(278)> [3] + Suspended (tty output) ls –color=auto -l thehost:/tmp/test1(278)> fg ls –color=auto -l total 0 thehost:/tmp/test1(279)> 在另一个terminal执行相同的命令工作正常: thehost:/tmp/test1(8)> ls -l & [1] 2280 thehost:/tmp/test1(9)> total 0 [1] Done ls –color=auto -l thehost:/tmp/test1(9)> 在受影响的terminal启动一个bash也不能解决这个问题: thehost:/tmp/test1(280)> bash oliver@thehost:/tmp/test1$ ls -l & [1] 2263 […]

使用dlopen和dlsym使用-fPIC编译C程序

我有一个错误的符号parsing的问题。 我的主程序用dlsym加载了一个dlopen共享库和一个来自它的符号。 程序和库都是用C库代码编写的 int a(int b) { return b+1; } int c(int d) { return a(d)+1; } 为了使它在64位机器上工作,-fPIC在编译时传递给gcc。 该计划是: #include <dlfcn.h> #include <stdio.h> int (*a)(int b); int (*c)(int d); int main() { void* lib=dlopen("./libtest.so",RTLD_LAZY); a=dlsym(lib,"a"); c=dlsym(lib,"c"); int d = c(6); int b = a(5); printf("b is %dd is %d\n",b,d); return 0; } 如果程序不是用-fPIC编译的话,一切运行正常,但是当用-fPIC编译程序时,程序崩溃时会出现分段错误。 调查发现,坠机是由于符号a的错误parsing。 当调用a时会发生崩溃,无论是从库还是主程序(后者通过在主程序中注释掉调用c()的行来获得)。 […]