问题描述
此C程序的目的是使我更轻松地打开对应于我在学校的每个班级的网站。当我在终端(kitty)中运行代码时,该代码通常可以正常运行,但是当我将其绑定到密钥时,该代码将失败。
我在Linux上,并且使用XFCE4的默认keybind实用程序绑定密钥。我的键盘绑定在终端仿真器kitty
中打开可执行文件。
在我的设置中,我将PageUp绑定到以下命令:
kitty bash -c "/home/carter/Code/classes/classes"
它应按顺序执行以下操作:
#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()
格式运行命令
这似乎起初是可行的,但是在执行完代码后,它使我的终端窗口保持打开状态。当我关闭小猫时,它关闭了Firefox。
这不起作用。它显示类并正确读取我的输入,但是此后什么也没做。 Firefox无法打开,小猫也会关闭。
- 像
popen("firefox {URL}","w")
一样运行它
当我这样做时,我得到的结果与#2相同。
我正在尝试进行某种系统调用,以正确生成新的firefox进程。知道发生了什么吗?对不起,所有这些背景信息。
解决方法
没关系。经过一番摆弄,我找到了一个对我有用的解决方案。
我最终使用带有resources/public/index.html
标志的setsid
命令:
f