我希望在 Linux 中创建一个应用程序,其中一次只能运行一个应用程序实例。我想让它变得健壮,这样如果应用程序的一个实例崩溃,它就不会无限期地阻止所有其他实例。我真的很感激一些关于如何做到这一点的示例代码(因为网上有很多关于这个主题的讨论,但我在尝试时找不到任何有效的东西)。
我正在尝试运行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) 我发现在调试时我花了很多时间试图确定结构的成员偏移量.我想知道是否有一种快速的方法来确定编译时大型结构中成员的偏移量.(注意:我知道创建编译时断言的几种方法,即偏移量在给定范围内,我可以进行二进制搜索以获得正确的值,但我正在寻找更高效的东西).我正在使用一个相当新版gcc本来编译C代码.
我正在寻找一种将选项转换为 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 …
我正在查看另一个堆栈溢出问题,他们正在使用看起来像是 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变量设置X为Y配方的该行(即什么都不做)。相反,它似乎在运行配方时进行评估all,另外,它似乎设置了 make 变量。我浏览了 make 手册页和在线手册,但找不到任何描述此行为的内容(我正在使用 GNU Make 4.0)。有人可以向我指出一些描述这一点的文档,或者解释一下发生了什么吗?
我在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)