在 Linux 或 Mac 中是不是有与 getprop/setprop 类似的命令?
Posted
技术标签:
【中文标题】在 Linux 或 Mac 中是不是有与 getprop/setprop 类似的命令?【英文标题】:Is there similar commands to getprop/setprop in Linux or Mac?在 Linux 或 Mac 中是否有与 getprop/setprop 类似的命令? 【发布时间】:2021-12-06 02:56:50 【问题描述】:我想知道android中是否存在与getprop/setprop
类似的命令。
我希望能够对已编译应用的某些属性进行更改,而无需再次编译。
我知道在 Android 上我可以使用 adb shell setprop
这样做,但我没有在 Linux/Mac 中找到类似的东西。
有一种方法可以在 Linux 上使用环境变量执行类似的操作(在 Mac 上可能相同),但还有其他方法吗?
我将举例说明我想做的事情: 假设我有一个程序使用默认线程数进行并行化,并且我不会在编译后更改线程数。 我可以通过添加一个环境变量来做到这一点,在我的会话中设置它然后运行我的应用程序。
以下代码演示了这一点:
#include <sstream>
#include <cstdlib>
template <class T>
bool getEnv(const char* envVariable, T& value)
auto envValue = getenv(envVariable);
if (!envValue)
return false;
if constexpr (std::is_same_v<T, int>)
auto tempValue = strtol(envValue, nullptr, 10);
if (tempValue < std::numeric_limits<int>::min() ||
tempValue > std::numeric_limits<int>::max())
return false;
value = tempValue;
else if constexpr (std::is_same_v<T, double>)
auto tempValue = strtod(envValue, nullptr);
if (tempValue < std::numeric_limits<double>::min() ||
tempValue > std::numeric_limits<double>::max())
return false;
value = static_cast<double>(tempValue);
else
// make sure this won't compile
static_assert(!std::is_same_v<T, T>);
return true;
int main()
int number_of_threads;
int status = getEnv("NUMBER_OF_THREADS", number_of_threads);
if (!status)
std::cerr << "Failed to get NUMBER_OF_THREADS\n";
return 1;
std::cout << "NUMBER_OF_THREADS=" << number_of_threads << "\n";
return 0;
在终端上:
idancw:~/envTest/cmake-build-debug> export NUMBER_OF_THREADS=4
idancw:~/envTest/cmake-build-debug> ./test
NUMBER_OF_THREADS=4
idancw:~/envTest/cmake-build-debug> export NUMBER_OF_THREADS=10
idancw:~/envTest/cmake-build-debug> ./test
NUMBER_OF_THREADS=10
还有其他不使用 env 变量的方法吗,类似于 Android?
我怀疑我也可以在 Mac 上使用 env 方法,但还有别的吗?
谢谢:)
【问题讨论】:
其他流行的选项是配置文件和命令行参数。 我对这些很熟悉,但我想像 Android 一样使用 getprop/setprop 使其变得简单 【参考方案1】:为了回答最初的问题,让我们看看 getprop / setprop 在 Android 上究竟做了什么。
例如,从here 我们知道,getprop / setprop 只是用于读取和写入某些数据库的 API,存储在文件系统上的文件中。该 API 由名为“property_service”的系统进程管理。
所以我们可能想要的品质是:系统范围的、可通过一些本机 API 访问的、持久性数据库。由于本机 API 在需求列表中,我们可以预测不会有开箱即用的跨平台解决方案 :)
在 Windows 上,我会说它听起来像注册表。它定义存储在文件系统中,有 WinAPI 可以访问或更改它,并且它会持续重启。
在 macOS 上,我能想到的最接近的东西是 NSUserDefaults。
对于 linux afaik,没有针对所有发行版的统一解决方案,但是有很多地方可以存储和读取文件系统中的参数,广泛discussed。
【讨论】:
以上是关于在 Linux 或 Mac 中是不是有与 getprop/setprop 类似的命令?的主要内容,如果未能解决你的问题,请参考以下文章