小编Joh*_*ohn的帖子

Linux 中的跨进程锁定

我希望在 Linux 中创建一个应用程序,其中一次只能运行一个应用程序实例。我想让它变得健壮,这样如果应用程序的一个实例崩溃,它就不会无限期地阻止所有其他实例。我真的很感激一些关于如何做到这一点的示例代码(因为网上有很多关于这个主题的讨论,但我在尝试时找不到任何有效的东西)。

linux mutex

4
推荐指数
2
解决办法
3181
查看次数

在bash中扩展星号

我正在尝试运行find,并排除数组中列出的几个目录.然而,当它扩展时,我发现了一些奇怪的行为,这导致了我的问题:

~/tmp> skipDirs=( "./dirB" "./dirC" )
~/tmp> bars=$(find . -name "bar*" -not \( -path "${skipDirs[0]}/*" $(printf -- '-o -path "%s/\*" ' "${skipDirs[@]:1}") \) -prune); echo $bars
./dirC/bar.txt ./dirA/bar.txt
Run Code Online (Sandbox Code Playgroud)

这并没有dirC像我预期的那样跳过.问题是打印扩展了引号"./dirC".

~/tmp> set -x 
+ set -x
~/tmp> bars=$(find . -name "bar*" -not \( -path "${skipDirs[0]}/*" $(printf -- '-o -path "%s/*" ' "${skipDirs[@]:1}") \) -prune); echo $bars
+++ printf -- '-o -path "%s/*" ' ./dirC
++ find . -name 'bar*' -not '(' -path './dirB/*' -o -path …
Run Code Online (Sandbox Code Playgroud)

bash parsing glob escaping

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

有没有办法在编译时确定成员偏移量?

我发现在调试时我花了很多时间试图确定结构的成员偏移量.我想知道是否有一种快速的方法来确定编译时大型结构中成员的偏移量.(注意:我知道创建编译时断言的几种方法,即偏移量在给定范围内,我可以进行二进制搜索以获得正确的值,但我正在寻找更高效的东西).我正在使用一个相当新版gcc本来编译C代码.

c gcc

3
推荐指数
2
解决办法
1801
查看次数

是否可以在 Kconfig 中将选择转换为 int

我正在寻找一种将选项转换为 Kconfig 文件中的 int 的方法。例如,我想要:

config BUFSIZE
    int

choice
    prompt "choose a buffersize"
    depends on FOOBAR
    default 10 if FOO
    default 15 if BAR 
    default 20

config SIZE10
    bool "10"
    depends on !FOO
    select BUFSIZE=10

config SIZE15
    bool "15"
    depends on FOOBAR | BAR
    select BUFSIZE=15

config SIZE20
    bool "20"
    depends on BAR
    select BUFSIZE=20

endchoice
Run Code Online (Sandbox Code Playgroud)

当然,您不能使用=with select,因此上述方法不起作用。实际的选择列表有点长且易变,所以我想避免#ifdef在另一个文件中使用's字符串将它们转换为整数(加上这些值在 Makefile 和 C 文件中使用......)

我的替代方法是让BUFSIZE用户可配置,但这是有问题的,因为我不能很好地限制可能的值。同样,如果我为 an 指定默认值int并运行make oldconfig(之前未定义该值),它会提示我输入一个值。如果您为某个选项设置了默认值,它似乎不会提示您进行 make oldconfig。这很重要,因为FOOBAR …

kbuild

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

在 Makefile 配方中使用 eval 设置变量

我正在查看另一个堆栈溢出问题,他们正在使用看起来像是 makefile 的未记录行为...如果我有以下 Makefile:

X=X 

all:
    @echo $@: $(X)
    $(eval X=Y)
    @echo $@ part2: $(X)

all2:
    @echo $@: $(X)
Run Code Online (Sandbox Code Playgroud)

然后我运行:

~> make all2
all2: X
~> make all all2
running all
all: X
all part2: Y
all2: Y
Run Code Online (Sandbox Code Playgroud)

我本来希望$(eval X=Y)在 Makefile 解析时展开,并将shell变量设置XY配方的该行(即什么都不做)。相反,它似乎在运行配方时进行评估all,另外,它似乎设置了 make 变量。我浏览了 make 手册页和在线手册,但找不到任何描述此行为的内容(我正在使用 GNU Make 4.0)。有人可以向我指出一些描述这一点的文档,或者解释一下发生了什么吗?

makefile eval

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

Makefile:只订购先决条件和$ ^

我在makefile中有以下内容:

.PHONY: preq_test a b c d

a b c d:
    @echo building $@

preq_test : a b | c d
    @echo preq prequisites are: $^;
Run Code Online (Sandbox Code Playgroud)

现在,$^应该根据文档列出所有先决条件(除了重复):

$^
$+
    The names of all the prerequisites, with spaces between them. For prerequisites
    which are archive members, only the named member is used (see Archives). The value
    of $^ omits duplicate prerequisites, while $+ retains them and preserves their
    order.
Run Code Online (Sandbox Code Playgroud)

但仅限订单的先决条件不会出现在$^:

building a
building b
building c
building …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

标签 统计

makefile ×2

bash ×1

c ×1

escaping ×1

eval ×1

gcc ×1

glob ×1

gnu-make ×1

kbuild ×1

linux ×1

mutex ×1

parsing ×1