我在写了一个自启动服务,开机启动一个可执行文件,现象是这个可执行程序无法读写同级目录下的另一个文件。
程序调试时没问题,可以正常读写。但放到开机自启动就不行了,开机没有写入数据,查看服务和进程都在运行。
我打开文件的路径是直接用文件名打开,fopen("a.txt","r"),是不是这个在自启动时就是另一个位置了,所以没能正常读写文件?换成fopen("./a.txt","r")是不是可以了?请问有人可以说说这两者有什么区别吗,感谢
Ubuntu systemctl 自启动路径问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注 参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在Ubuntu系统中使用
systemd
配置自启动服务时,你遇到的文件读写问题可能与可执行程序运行时的工作目录(working directory)有关。当通过systemctl
启动服务时,默认的工作目录并不是你期望的可执行文件所在目录。-
使用
fopen("a.txt", "r")
时,程序会在当前工作目录下查找名为 "a.txt" 的文件。如果服务启动时的工作目录不是你的可执行文件所在的目录,那么它将无法找到并打开这个文件。 -
而使用
fopen("./a.txt", "r")
,则明确指示了程序应该在当前工作目录下查找 "a.txt" 文件。这里的./
表示当前目录,这样即使工作目录发生变化,只要相对于可执行文件本身来说 "a.txt" 是同级目录下的文件,它就能够正确地找到并打开该文件。
要解决这个问题,你可以通过在
systemd
的服务单元配置文件(通常位于/etc/systemd/system/your-service-name.service
)中的WorkingDirectory=
参数指定服务启动时的工作目录为可执行文件所在的目录:[Unit] Description=Your Service Description [Service] ExecStart=/path/to/your/executable WorkingDirectory=/path/to/your/executables/directory [Install] WantedBy=multi-user.target
这样一来,当服务启动时,其工作目录就会被设置为你期望的路径,从而使得
fopen("./a.txt", "r")
能够正常工作。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用-
悬赏问题
- ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
- ¥15 求caverdock使用教程
- ¥15 Coze智能助手搭建过程中的问题请教
- ¥15 12864只亮屏 不显示汉字
- ¥20 三极管1000倍放大电路
- ¥15 vscode报错如何解决
- ¥15 前端vue CryptoJS Aes CBC加密后端java解密
- ¥15 python随机森林对两个excel表格读取,shap报错
- ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
- ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。