我正在编写一个C程序,需要在默认文件资源管理器中打开一个位置(例如在Windows文件资源管理器中打开C:Program Files (x86)somefolder
,或在Nautilus/Nemo/任何默认文件资源管理器程序中打开/usr/share/somefolder
)。
是否有一种通用的方法来做到这一点,就像在Windows和Linux上使用相同的代码一样?
我确实发现了这个使用ShellExecute()
的问题,但这可能在Linux上不起作用。那么,是否有可能,如果没有,是否有一种方法来分离Linux和Windows的代码?
这在纯C中是不可能的。事实上,C标准并没有提到"linux";或";Windows"在所有。甚至连"操作系统"这个词都没有。只出现两次。第一次出现在5.1.2.1-1:
在一个独立的环境中(在这个环境中C程序的执行可能没有任何操作系统的好处)[…]
独立环境的替代方案是托管环境(5.1.2-1)。该标准继续使用术语"托管环境",但不区分不同的操作系统。
一个常见的解决方案是使用预处理器宏根据目标操作系统有条件地编译代码。例如:#ifdef __linux__
// Open in Linux. E.g. // system("xdg-open ...");
#elif __CYGWIN__
// Open in Windows.
#else
#error "Error: OS not supported."
#endif
这个问题包含一个操作系统和相应的宏的列表。