【发布时间】:2020-10-11 23:17:35
【问题描述】:
这个 C 程序的目的是让我更容易打开与我在学校的每个班级相对应的网站。当我在终端(kitty)中运行该代码时,它通常可以完美运行,但是当我将它绑定到一个键时它会失败。
我在 Linux 上,我正在使用 XFCE4 的默认键绑定实用程序绑定键。我的键绑定在我的终端模拟器中打开可执行文件kitty。
在我的设置中,我将 PageUp 绑定到以下命令:
kitty bash -c "/home/carter/Code/classes/classes"
它应该执行以下操作(按顺序):
- 显示我可以从中选择的课程列表
- 询问 1-7 的数字
- 在firefox中打开对应类的链接
- 停止执行并允许 kitty 关闭
这是代码(为了匿名,我已将链接和类名更改为示例):
#include <stdio.h>
#include <string.h>
int main() {
char classNames[7][15] = {"Class 1", "Class 2", "Class 3", "Class 4", "Class 5", "Class 6", "Class 7"};
char classLinks[7][60] = {"http://class1.com", "http://class2.com", "http://class3.com", "http://class4.com", "http://class5.com", "http://class6.com", "http://class7.com"};
for (int i = 0; i < sizeof(classNames)/15; i++) { // 15 bytes to each string
printf("%d) ", i+1);
printf(classNames[i]);
printf("\n");
}
int classIndex;
printf("\nClasses to open: ");
scanf("%d", &classIndex);
char cmd[70];
strcpy(cmd, "firefox ");
strcat(cmd, classLinks[classIndex-1]);
//strcat(cmd, " &"); // spawn new process ?
printf(cmd);
printf("\n");
system(cmd);
//popen(cmd, "w") // ???
}
这是我尝试过的一些事情(请记住,当我直接在终端中执行它们时,我很确定所有这些都有效。当我尝试将可执行文件绑定到键时它们会中断):
- 以
firefox {URL}和system()格式运行命令
起初这似乎可行,但在代码执行完成后它使我的终端窗口保持打开状态。当我关闭 kitty 时,它会关闭 firefox。
- 以
firefox {URL} &的格式运行它以使用system()生成一个新进程
这不起作用。它显示类并正确读取我的输入,但之后它没有做任何事情。 Firefox 打不开,kitty 关闭。
- 像
popen("firefox {URL}", "w")一样运行它
当我这样做时,我得到与 #2 相同的结果。
我正在尝试进行某种系统调用以正确生成一个新的 firefox 进程。知道发生了什么吗?很抱歉提供所有这些背景信息。
【问题讨论】: