Tag: linux

何时检查EINTR并重复该函数调用?

我正在为一个embedded式Linux系统编写一个用户应用程序,而且我正在使用这些设备的常用function,如打开,closures,读取,ioctl等。 现在,我读了EINTR,表明这个函数被一个信号中断了,但是我不确定它的含义。 在所有的示例程序中,有时会完成,例如ioctl(),有时不完成,例如read()。 所以,我有点困惑。 我什么时候最好检查EINTR并重复函数调用?

创build符号链接到另一个符号链接是否有任何副作用?

是否创build一个符号链接到另一个符号链接在Linux上有任何副作用(特别是在性能方面)?

为什么“可执行文件”操作系统依赖于?

我知道每个CPU /架构都有它自己的指令集,因此为特定CPU编写的程序(二进制)不能在另一个CPU上运行。 但是我不明白为什么一个可执行文件(像.exe这样的二进制文件)不能在Linux上运行,但是即使在同一台机器上也可以在Windows上运行。 这是一个基本的问题,我期待的答案是.exe和其他二进制格式可能不是原始机器指令,但它们包含一些依赖于操作系统的数据。 如果这是真的,那么这个操作系统相关的数据是什么样的? 作为一个例子.exe文件的格式和它和Linux可执行文件的区别是什么? 有一个来源,我可以得到简短的和详细的信息呢?

Windows容器可以托pipe在Linux上?

这可能在Linux上运行Windows容器 ? 这个场景是基于一个用.NET编写的解决scheme(旧的networking),而Linux用户则希望用Docker来运行这个解决scheme,以在localhost上提供一个net462编写的API。 我正在使用Docker for Windows的testing版 如果没有,那为什么Windows可以运行linux容器而不是反之呢? 编辑: 一段时间过去了,这个问题很受欢迎。 我想在这里添加一个说明,解决方法是使用新的netstandard。 它允许我将4.6.2框架包装到新的库中。

为什么docker能够运行不同的linux发行版?

我们可以使用docker来拉取不同的图像。 和这些图像是不同的Linux分布。 但是无论运行哪一个linux发行版docker,docker都可以像在虚拟机中一样运行这些不同的linux发行版。 我知道docker使用aufs来控制不同的读写访问级别。 所以它可以在主机上重新使用一些文件。 但是,当我在arch linux运行docker时,docker如何在容器中运行apt-get命令? imagegs是否包含apt-get二进制文件? 但不同的Linux发行版有不同的库和软件版本。 即使configuration文件是不同的。如何docker可以“运行”一个Ubuntu的拱桥Linux?

我如何以编程方式pipe理iptables规则?

我需要查询现有的规则,以及能够轻松添加和删除规则。 我还没有find任何API来做到这一点。 有什么我失踪? 最接近我的解决scheme是使用iptables-save | iptables-xml iptables-save | iptables-xml用于查询和手动调用iptables命令本身来添加/删除规则。 我考虑过的另一个解决scheme是简单地将整个规则集从我的应用程序的数据库中重新生成,并刷新整个链,然后再次应用它。 但我想避免这种情况,因为我不想丢弃任何数据包 – 除非有办法自动执行此操作。 我想知道是否有更好的方法。 C中的API将会很棒; 不过,因为我打算把它build成一个独立的suid程序,所以用这种语言来做这件事情的图书馆也不错。

shell脚本中“=〜”运算符的含义

我遇到了代码的shell脚本 for line in $LIST_ARRAY;do if [[ $LIST_ARRAY =~ $line ]] then echo "true" …. … . 在这种情况下,有什么用途?

malloc期间在内核中会发生什么?

面试中我被问到了这个问题。 他们想知道的是,当用户调用malloc(4)分配4个字节的内存时,操作系统(Linux)如何响应? 哪个子系统响应这个系统调用? 我告诉他malloc()将由内存pipe理子系统服务。 malloc()实现将遍历空闲内存列表(物理内存),我们将其称为空闲列表,并find大于或等于4字节的相应块。 一旦find这样的块,它将从空闲列表中删除并添加到使用的列表。 然后,这个物理内存将被映射到进程堆vma结构。 他似乎对这个答案并不满意。伙伴系统如何适应这个问题呢? 任何帮助将不胜感激。

如何分割一个文件,并保持每一块的第一行?

鉴于:一个大的文本数据文件(如CSV格式)与“特殊”的第一行(例如,字段名称)。 通缉:相当于coreutils split -l命令,但还要求原始文件的标题行出现在每个结果段的开头。 我猜测一些混合的split和head会做的伎俩?

这个C代码有什么弱点?

#include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> int main(int argc, char **argv, char **envp) { gid_t gid; uid_t uid; gid = getegid(); uid = geteuid(); setresgid(gid, gid, gid); setresuid(uid, uid, uid); system("/usr/bin/env echo and now what?"); } 我理解的方式,上面的代码允许任意代码(或程序)执行 – 是什么让这个脆弱,以及如何利用这一点?