使用System()从CPP程序中调用LN
using system() to call ln from a cpp program
我试图通过以下命令从CPP程序调用系统
system("ln -s -t "targetDir[0]" "baseDir[0]"");
targetDir和基于基础的QStringList。程序编译并运行,但是当我执行命令时,我会得到错误ln:targetDir [0]是无效的命令。当我通过硬编码值而不是使用变量测试时,它可以正常工作。我只能得出结论,它不会逃脱字符串,以将变量的值放置在传递给LN的参数。对于我的一生,我不知道为什么不。
有什么想法?
您感到困惑。系统(3(库函数(不是命令,尽管它的名称不是 一个系统调用,但这些命令在syscalls(2(中列出了这些调用/bin/sh -c
的过程显然对C 程序的变量不了解(在运行时,变量不存在;只有位置(。
顺便说一句,由于注入代码注入问题,使用系统(3(可能会很危险。想象一下您(错误的(方法targetDir[0]
包含foo; rm -rf $HOME
....
要建立符号链接,分叉一个过程是过分的。只需调用Symlink(2(系统调用(如果被调用为ln -s
,则ln(1(命令将调用该命令
QT库提供QFILE类,其QFILE ::链接成员函数或静态QFILE :: link(两者都将调用SymLink(2((
从C 17开始的C 的Future(或最新(版本将提供std::filesystem::create_symlink
功能(Linux上将调用 Symlink(2((。它可能受到Boost Filesystem库的启发。
ps。如果编码Linux或Posix,我建议阅读高级Linux编程(可自由下载(。但是,如果您希望一个可源的QT程序将自己限制在慷慨的QT API中。或采用C 17并使用其std::filesystem
事物。
c 绝不执行字符串插值。
如果您实际上是在C 上写的,则可以(考虑targetDir
是char **
或类似的东西(:
std::string command = std::string("ln -s -t "") + targetDir[0] + "" "" + baseDir[0] + """;
system(command.c_str());
- C# DLL 从C++应用程序调用 SOAP Web 服务
- 从C++程序调用 git 克隆
- 使用另一个程序调用正在运行的 C++ 程序中的函数
- C++控制台应用程序调用C++/CLI静态库
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- LoadLibray FileNotFound 取决于哪个应用程序调用
- 为什么无法在 Cocoa 应用程序调用的 C++ func 中嵌入自定义 Python 模块
- 使用模拟器C++从RISC-V裸机程序调用printf系统调用时失败
- C++程序调用 C 函数 在 g++ 链接期间获取未定义的引用
- 使用 gtest 和 gmock 验证程序调用
- 从 Qt 小部件应用程序调用 pyqt widget
- 如何使用Mono / C#程序调用Linux / C ++函数?
- 是否可以通过另一个程序调用程序
- 从应用程序调用静态库时,QT创建者什么都不会发生
- 如何知道库的哪些功能是由程序调用的
- OpenCV 函数在由C++线程程序调用的 Python 脚本本身调用时锁定
- numpy.core.multiarray在通过Xcode中开发的C 应用程序调用Python模块时未能导入
- 如何使用 lamba 作为连接处理程序调用 boost async_connect 作为成员函数
- 如何调试由另一个程序调用的程序
- 从C 程序调用FFMPEG