小编lge*_*get的帖子

如果不是编程语言中的实现,“系统调用”是什么意思?

我想了解术语“系统调用”。我熟悉系统调用用于从用户空间应用程序获取内核服务。

我需要澄清的部分是“系统调用”和“系统调用的 C 实现”之间的区别。

这是一个让我困惑的引用:

在类 Unix 系统上,该 API 通常是 C 库 (libc) 实现的一部分,例如 glibc,它为系统调用提供包装函数,通常与它们调用的系统调用命名相同

什么是“他们调用的系统调用”?他们的来源在哪里?我可以将它们直接包含在我的代码中吗?

一般意义上的“系统调用”是否只是 POSIX 定义的接口,但要实际查看实现,可以检查 C 源代码并在其中查看实际用户空间与内核通信的实际情况?

背景说明:我试图了解是否每个 c 函数最终都与来自/dev.

c kernel system-calls posix

17
推荐指数
3
解决办法
6061
查看次数

Linux 重启系统调用中的“魔法参数”有什么用?

当我阅读 Linux 源代码,更具体地说是系统调用代码时,我遇到了sys_reboot实现:http : //lxr.free-electrons.com/source/kernel/reboot.c#L199

199 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
200                 void __user *, arg)
201 {
202        ...
...    
286 }
Run Code Online (Sandbox Code Playgroud)

在中间,有一段特定的代码:

209 
210         /* For safety, we require "magic" arguments. */
211         if (magic1 != LINUX_REBOOT_MAGIC1 ||
212                         (magic2 != LINUX_REBOOT_MAGIC2 &&
213                         magic2 != LINUX_REBOOT_MAGIC2A &&
214                         magic2 != LINUX_REBOOT_MAGIC2B &&
215                         magic2 != LINUX_REBOOT_MAGIC2C))
216                 return -EINVAL;
Run Code Online (Sandbox Code Playgroud)

我想知道它实际上提供了什么样的“安全”。我的意思是,是为了防止滥用吗?在这种情况下,由于参数是公开的,任何库或应用程序都可能滥用系统调用,即使它们需要传递参数。我错过了什么?

linux system-calls reboot

12
推荐指数
1
解决办法
5174
查看次数

排序数据更快的方法

我需要对bed文件随机排序10000 次,每次取前 1000 行。目前,我正在使用以下代码:

for i in {1..100}; do
    for j in {1..100}; do
        sort -R myfile.bed_sorted | tail -n 1000 > myfile.bed.$i.$j.bed
    done
done
Run Code Online (Sandbox Code Playgroud)

为每个文件执行此操作需要将近 6 个小时。我有大约 150 个需要解决。有没有更快的解决方案?

我有一个数据样本(myfile.bed_sorted):

    chr1    111763899   111766405   peak1424    1000    .   3224.030    -1  -1
    chr1    144533459   144534584   peak1537    998 .   3219.260    -1  -1
    chr8    42149384    42151246    peak30658   998 .   3217.620    -1  -1
    chr2    70369299    70370655    peak16886   996 .   3211.600    -1  -1
    chr8    11348914    11352994    peak30334   990 .   3194.180    -1  -1
    chr21   26828820 …
Run Code Online (Sandbox Code Playgroud)

sort

11
推荐指数
2
解决办法
1183
查看次数

提取蓝牙MAC地址:hcitool dev

我必须从命令中hcitool dev 提取蓝牙加密狗的 MAC 地址。

的输出hcitool dev是:

Devices:
hci0    xx:xx:xx:xx:xx:xx
Run Code Online (Sandbox Code Playgroud)

我将此输出写入文件并尝试使用以下内容获取信息awk

hcitool dev > /home/pi/mario/BT.txt
awk ' { print $2 } ' /home/pi/mario/BT.txt
Run Code Online (Sandbox Code Playgroud)

输出还包含第一行,它是一个空单元格:

xx:xx:xx:xx:xx:xx

我怎样才能推迟第一个细胞?

hardware text-processing bluetooth mac-address usb-device

10
推荐指数
1
解决办法
2万
查看次数

函数符号编译后得到'.part'后缀

交叉编译 Linux 内核 3.18.10 时,编译器会.part.<N>在某些符号的末尾添加后缀(参见下面的示例)。<N>使用不同的 defconfigs 时,数字会发生变化。有人知道在什么条件下编译器会在符号末尾添加零件后缀吗?

$ arm-none-linux-gnueabi-readelf -a vmlinux | grep do_kernel_fault

c03a48f8 116 FUNC LOCAL DEFAULT 2 __do_kernel_fault.part.10

compiling gcc symbol-table

7
推荐指数
1
解决办法
1409
查看次数

如何使 cifs/smb 挂载忽略 umask?

我有一个从/etc/fstab. 但是我非常希望在该共享上创建文件/目录以忽略我的 umask。那可能吗?似乎 cifs 不支持该umask=000选项(来源:)man mount.cifs

我目前最好的选择是将系统范​​围的 umask 设置为 000,但我不想这样做,因为我想让本地机器更加锁定。愚蠢的是我以前的 NAS 做得很好,所以也许这是需要的服务器端更改?

permissions umask mount cifs smb

5
推荐指数
2
解决办法
1万
查看次数

通过路由器重定向环回流量

出于某些测试目的,我在一台机器上运行多个基于套接字的应用程序,并希望模拟它们之间的“真实”网络条件。我认为最简单的方法是通过我的计算机连接的路由器重定向应用程序之间的所有流量。直观地说,这应该或多或少地像连接到同一网络的多台计算机一样执行,并且网络本身应该受路由器(100Mbps)的能力而不是本地机器间套接字连接的限制。

我的机器(192.168.1.101)通过接口直接连接到路由器(192.168.1.2)em1。我试图通过添加一个 ip 路由来做到这一点。我的 ip route 命令的结果是:

default via 192.168.1.2 dev em1  proto static  metric 1024 
192.168.1.0/24 dev em1  proto kernel  scope link  src 192.168.1.101 
192.168.1.101 via 192.168.1.2 dev em1 
Run Code Online (Sandbox Code Playgroud)

然而,这似乎没有任何影响,因为 ping localhost 返回的结果与间接 ping 我的机器(192.168.1.101)大致相同,即大约 0.040 毫秒。同时,在我的网络中 ping 另一台机器会导致 ping 大约 0.3-0.5 毫秒。

我试过traceroute,这是我得到的:

$traceroute 192.168.1.200                    # my other computer
traceroute to 192.168.1.200 (192.168.1.200), 30 hops max, 60 byte packets
 1  192.168.1.200 (192.168.1.200)  1.005 ms  0.972 ms  0.954 ms

$traceroute 192.168.1.101
traceroute to 192.168.1.101 (192.168.1.101), 30 hops …
Run Code Online (Sandbox Code Playgroud)

networking routing iptables

5
推荐指数
1
解决办法
1617
查看次数

我可以从 vmlinuz 文件中获取 .config 文件吗?

我正在使用带有自定义内核的 Arch Linux 存储为/boot/vmlinuz-linux1. 我想要的某些功能在其中不起作用,但也有一个/boot/vmlinuz-linux内核可以使这些功能起作用。如何.config从第二个vmlinuz文件中检索内核配置文件,以便在文本编辑器中将其与第一个内核的配置进行比较?

kernel arch-linux configuration

4
推荐指数
1
解决办法
2434
查看次数

脚本未按预期执行

我在 Unix 中的预定义位置有两个 Perl 脚本。此预定义位置在路径变量 ( $PATH) 中设置。现在,当我尝试运行第一个脚本(从任何位置)时,该脚本成功运行,而第二个脚本(与前一个脚本的路径相同)会引发错误提示

ScriptB: Command not found
Run Code Online (Sandbox Code Playgroud)

我的 shell 是 tcsh 并且授予两个脚本的权限是相同的。

这种错误行为的可能原因是什么?

scripting tcsh path

3
推荐指数
1
解决办法
113
查看次数

基于列排序

10 awhdk;
14 hjoeow;
2  kdkld;
4  jkjdksl
Run Code Online (Sandbox Code Playgroud)

如何根据第一列(即计数)对其进行排序?

我想得到这个输出:

14 hjoeow;10 awhdk;4 jkjdksl;2 kdkld

我需要根据对第一列的排序来打印两列。

sort

3
推荐指数
1
解决办法
2314
查看次数

openssl 不从配置文件加载引擎

我正在使用 openssl-1.0.1f。我正在尝试在配置文件中加载 pkcs11 引擎,但它不起作用。这是我的配置:

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/ssl/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/arm-linux-gnueabihf/opensc-pkcs11.so
default_algorithms = ALL
init = 0
Run Code Online (Sandbox Code Playgroud)

以下是结果openssl engine pkcs11 -t

1996159072:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(/usr/lib/arm-linux-gnueabihf/openssl-1.0.0/engines/libpkcs11.so): /usr/lib/arm-linux-gnueabihf/openssl-1.0.0/engines/libpkcs11.so: cannot open shared object file: No such file or directory
1996159072:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
1996159072:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:447:
1996159072:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:418:id=pkcs11
Run Code Online (Sandbox Code Playgroud)

configuration openssl

3
推荐指数
1
解决办法
8168
查看次数

打印最后一个字段

如何打印行中最后一个单词之前的单词(使用 ksh 或 awk 或 sed 或 perl 一行)

示例 1:

  echo one two three
Run Code Online (Sandbox Code Playgroud)

将打印“两个”

示例 2:

 echo 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

将打印“5”

ksh sed awk perl

1
推荐指数
1
解决办法
4641
查看次数

同时显示带有 cat 的目录中的所有文件

我正在编写一个脚本,它允许我查看整个选定目录中每个文件的内容,但我不太知道该怎么做。

我在想的输出通过管道ls进入catless但这似乎并没有工作时。

是否有我需要使用的命令行变量,或者是否有满足我需要的命令?

我想要这个,这样每当我在寻找某个我不记得的文件时,我就可以快速查看文件的内容。

scripting bash cat

1
推荐指数
1
解决办法
1万
查看次数