在C中查找脱机软件中的文件位置

在C中查找脱机软件中的文件位置,c,file,offline,C,File,Offline,在我的C程序中的某个时刻,我必须处理这样的事情 FILE * fptr = fopen("/Parent/child/.../file.dat"); 这意味着为了访问任何文件,我需要知道它的位置。这完全可以理解。 但是,我怎样才能使这个通用?在我的计算机中“/Parent/child/../file.dat”将起作用,因为文件存储在那里,但我正在制作一个软件分发给其他用户,因此路径明显不同。我的问题是,如何将特定文件安装到用户的计算机中,以便知道并获取该文件的位置。我对这个

在我的C程序中的某个时刻,我必须处理这样的事情

FILE * fptr = fopen("/Parent/child/.../file.dat");
这意味着为了访问任何文件,我需要知道它的位置。这完全可以理解。
但是,我怎样才能使这个通用?在我的计算机中“/Parent/child/../file.dat”将起作用,因为文件存储在那里,但我正在制作一个软件分发给其他用户,因此路径明显不同。我的问题是,如何将特定文件安装到用户的计算机中,以便知道并获取该文件的位置。我对这个概念感到困惑,因此,如果有任何资源可以帮助我更好地理解它,我将不胜感激。

在Linux中,应用程序文件的默认路径应该是硬编码的。有一个应用程序应该遵循的原则。例如,与体系结构无关的文件应该转到
/usr/share/
,然后是您的应用程序名称,或者,如果您希望在应用程序之间共享数据,则是一个通用类别,例如
图像
。特定于用户的配置文件应转到
$HOME/.config/
。较旧的应用程序将其默认配置放在
$HOME/

您还应该能够使用命令行开关和/或环境变量和/或用户配置文件覆盖数据的默认路径(后者的位置也应该可以使用命令行开关和/或环境变量覆盖)

一些应用程序搜索其相对于可执行文件位置的数据目录。可执行文件可以通过读取
/proc/self/exe
符号链接来知道自己的绝对路径。例如,如果一个可执行文件在
/usr/local/bin/somename
中找到自己,它可以查找
/usr/local/share/
(从可执行文件名到
share/
有两个级别)


最后,如果您分发源代码供用户构建,则文件位置应为配置参数。

使用命令行参数并传递路径,有问题吗?也许我不太理解这一点,但用户只需单击某个应用程序图标并运行它,我不希望任何人通过命令行运行程序,并为文件位置传递适当的参数。这些方法依赖于操作系统。是的。是否有一个来源,我可以了解这个具体的linux为例。我试过了,但发现很难找到有用的。