Articles of GNU

我怎样才能logging在GNU / Linux中使用磁盘的进程或内核活动?

在特定的Debian服务器上,iostat(以及类似的)报告正在进行的磁盘写入的意外高容量(以字节为单位)。 我无法确定哪个进程正在执行这些写操作。 两个有趣的点: 试图closures系统服务一次一个都无济于事。 磁盘活动保持相当稳定和意外高。 尽pipe写作,似乎并没有消耗更多的整个磁盘空间。 这两个都让我觉得这个写作可能是内核正在做的事情,但是我并没有交换,所以我不清楚Linux可能会写什么。 可以试试看: http://www.atcomputing.nl/Tools/atop/ 但是想避免修补我的内核。 任何想法如何跟踪这个?

如何使用mount(8)和fstab注册FUSE文件系统types?

我已经写了一个小型的基于FUSE的文件系统,现在唯一缺less的部分就是我想用fstab(5)来注册它,以便在系统启动时自动挂载它,并且/或者用mount /srv/virtual-db 。 我怎样才能做到这一点? 我知道,我可以从一些初始化脚本运行/usr/bin/vdbfs.py /srv/virtual-db ,但这并不完美。 我很抱歉,因为这可能不完全是一个编程问题,但它是高度相关的,因为打包和部署仍然是程序员的工作。

没有findgcc-arm-linux-gnueabi命令

我正在尝试为ubuntu安装gnu arm工具链。 我首先从CodeSourcery下载了tar。 但是当我进入bin文件夹时,我无法运行任何二进制文件。 我已经试过./和没有,并把它放在PATH,它不断告诉我“命令未find”,但文件在我面前的文件夹中。 然后,我试过sudo apt-get安装gcc-arm-linux-gnueabi,除非它说已经安装成功,我找不到它与whereis gcc-arm-linux-gnueabi。 谁能帮忙?

在Linux下,C ++源代码如何变成可执行文件或静态/dynamic库。 以及程序在运行时如何加载到内存中

我知道源代码可以编译并链接到共享/静态库或ELF可执行文件。 当程序运行时,它会加载到内存中,并根据ELF格式创build一个过程映像。 但我不知道程序如何加载共享库。 链接器如何在外部库中寻找符号以及.a归档如何工作。 如果程序在64位操作系统上运行,还应该知道些什么? 我正在试图把它画出来。 有人可以对整个事情进行一般性的讨论,并提供参考资料/文件/链接,以便我们可以一一研究。 提前致谢。 我想我的问题可以这样描述: 在Linux下,C ++源代码如何变成可执行文件或静态/dynamic库。 以及程序在运行时如何加载到内存中。 在GREATE细节! 以及我可以使用多less工具来检查/操作Linux二进制文件(可执行文件和库)? 我知道一些“纳米”“readelf”。

GCC构build问题(#include_next limits.h)

当我尝试 $ make depends -f gcc.mak 我的Ubuntu机器上的中间件我得到这个 /usr/include/../include/limits.h:125:26:错误:不包含要在其中searchlimits.h的path 这是limits.h的内容:125: / *获取编译器的limits.h,它定义了几乎所有的ISO常量。 我们把这个#include_next放在双重包含检查之外,因为 应该有可能包含这个文件不止一次,仍然得到 来自gcc头文件的定义。 * / #if defined __GNUC__ &&!defined _GCC_LIMITS_H_ / *`_GCC_LIMITS_H_'是GCC文件定义的。 * / #include_next <limits.h> #万一 我试着设置 $ export INCLUDE = / usr / lib / gcc / x86_64-linux-gnu / 4.3 / include-fixed / $ export C_INCLUDE_PATH = / usr / lib / […]

用于parsing参数GNU风格的库?

我注意到了大多数GNU核心应用程序的基本“风格”,其中的观点是: –longoption –longoption=value或–longoption value -abcdefg (多选项) -iuwww-data (选项i , u = www-data ) 他们遵循以上的风格。 我想避免写一个参数parsing器,如果有一个库使用上述风格来做到这一点。 你知道吗?

libc(glibc)在我们的linux应用程序中的作用是什么?

当我们使用gdbdebugging一个程序时,我们通常会看到在libc(glibc?)中定义的具有奇怪名字的函数。 我的问题是: libc / glibc是“strcpy”,“strlen”,“malloc”等标准C / C ++函数的标准实现吗? 或者,它不仅是上述的第一个用法,而且是“open”,“close”,“fctl”之类的Unix / Linux系统调用的封装? 如果是这样,为什么我们不能直接发出系统调用,没有libc? libc只包含一个lib(.a或.so)文件,还是多个lib文件(在这种情况下,libc是这个lib的一般名称)? 这些lib文件在哪里? libc和glibc有什么不同?

将符号链接到Linux上的固定地址

如何使用GNU ld将(某些)符号链接到特定的固定地址,以便二进制文件在Linux(x86)中仍可正常执行? 这些符号将不会被访问,但是他们的地址是重要的。 例如,我会有以下结构: struct FooBar { Register32 field_1; Register32 field_2; //… }; struct FooBar foobar; 我想链接foobar地址0x76543210,但正常链接标准库和应用程序的其余部分。 然后,应用程序将使用foobar的地址,但不会引用它后面的(可能不存在的)内存。 这个请求的基本原理是可以在两个平台上使用同一个源代码:在本地平台上, Register32可以简单地是一个volatile uint32_t ,但是在Linux Register32是一个与uint32_t相同大小的C ++对象,例如operator= ,然后它将使用该对象的地址,并向具有该地址(和数据)的通信框架发送请求以在远程硬件上执行实际的访问。 链接器将因此确保结构的Register32字段引用正确的“地址”。

_GNU_SOURCE和__USE_GNU

我想使用CPU_SET ,这是一个glibc linux专用的macros,应该在sched.h定义sched.h明确指出_GNU_SOURCE必须被定义,以便定义macros。 但是,查看头文件, CPU_SET定义了__USE_GNU (有一个#ifdef保护) __USE_GNU定义__USE_GNU 。 我似乎记得几年前,需要_GNU_SOURCE 。 问题: 1)显然,联机帮助页是closures的。 如何通知维护人员该联机帮助页是不正确的? 2)从_GNU_SOURCE到__USE_GNU的转换__USE_GNU发生(无论是版本还是时间) 3)是否有新版本的glibc仍然使用_GNU_SOURCE ? 或者我可以安全地假定定义__USE_GNU就足够了?

Linux:阻塞,直到一个文件中匹配的string(“tail + grep with blocking”)

在bash / GNU工具中是否存在一些单行的方法,直到在文件中匹配一个string? 理想情况下,超时。 我想避免多线循环。 更新:似乎我应该强调,我希望过程结束时,string匹配。