c/c++语言开发共享使用popen()在命令行中打开程序?

是否可以使用其他程序打开程序? 例如:我想在C中创建一个命令行应用程序,它将提示用户输入程序名称(比如说Microsoft Word.app),该程序将启动。 我会做这样的事情:

#include  #include  int main (int argc, const char * argv[]) { char programName[1000]; printf("Type in the name of the program you would like to open: "); scanf("%s", programName); popen(programName); } 

但是,popen()要求我另一个char。 我如何使用popen()打开程序?

编辑:以下代码有效!

 #include  #include  int main (int argc, const char * argv[]) { char programName[1000]; char app[100] = ".app"; char openApp[100] = "open /Applications/"; printf("Type in the name of the program you would like to open: "); scanf("%s", programName); strcat(openApp, programName); strcat(openApp, app); system(openApp); } 

    popen允许您启动程序并获取其输入或输出的文件描述符,就像fopen适用于文件一样。 例如,如果您想阅读程序的输出,则使用popen("program", "r") 。 另一方面,如果要写入其输入,则使用popen("program", "w") 。 Mac OS X还允许使用r+ ,它允许您读取输出并写入输入,但此function不是标准function,不应依赖于跨平台代码。

    如果你只是想启动一个程序,你也可以使用system函数,它执行该操作并等待程序退出,此时它将返回状态代码。 system实际上调用shell来工作,因此参数将进行扩展(环境变量,〜等)。

    编辑在您发表评论后, system("Microsoft Word.app")无法正常工作:实际上有几个原因。 从您得到的消息开始:这是因为您所写的内容相当于打开终端窗口并键入Microsoft Word.app 。 换句话说,它试图找到一个名为“Microsoft”的程序,然后传递参数“Word.app”。 您需要引用程序名称或转义空间以使shell了解它是整个程序名称而不是程序名称然后是参数: system("Microsoft Word.app")

    现在,这应该抱怨说shell无法找到程序“Microsoft Word.app”,这已经向前迈进了一步。

    这是因为在Mac OS上, app文件不是可执行文件:它们是Finder显示为单个文件的文件夹。 您可以通过按住Ctrl键并单击(或右键单击)某个应用并选择“显示包内容”来validation(这将打开应用程序文件夹)。 Microsoft Word.app的实际可执行文件必须位于Microsoft Word.app/Contents/MacOS/Microsoft Word路径的某个Microsoft Word.app/Contents/MacOS/Microsoft Word

    如您所见,这有点复杂。 幸运的是,Apple提供了open可执行文件,可以使用一堆OS服务来找出这些细节。 它允许以下列方式启动应用程序:

     open -a Microsoft Word 

    这应该启动Word。 (注意你仍然需要如何逃避空间。)在纯C代码中,这将得到这样的东西:

     system("open -a Microsoft\ Word"); 

    但是,如果您选择使用Objective-C和Cocoa,则可以通过一种非常简单的方式打开应用程序:

     NSString* appName = @"Microsoft Word"; // no escape! [[NSWorkspace sharedWorkspace] launchApplication:appName]; 

    可以很容易地从C字符串创建NSString对象:

     NSString* appName = [[NSString alloc] initWithCString:programName encoding:NSUTF8StringEncoding]; [[NSWorkspace sharedWorkspace] launchApplication:appName]; [appName release]; 

    为此目的使用system(3)会更好。

    popen(3)函数建立一个可由调用者读取或写入的管道。 但GUI应用程序不使用标准输入和标准输出,它们连接到图形界面服务器,有时称为“窗口服务器”。 此服务器已在运行,已经确定了它的键盘输入,并且始终将其输出写入video设备。

    要启动一个.app你应该实际运行open(1)程序,所以尝试类似:

     system("open /Applications/MacVim.app"); 

      以上就是c/c++开发分享使用popen()在命令行中打开程序?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享使用popen()在命令行中打开程序?

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549898.html

      (0)
      上一篇 2021年1月14日 下午4:04
      下一篇 2021年1月14日 下午4:07

      精彩推荐