【发布时间】:2014-09-12 22:30:10
【问题描述】:
所以我正在编写一个更像是 shell 的 C 程序,我已经到了需要创建一个命令来在 nano 中打开文件的地步。实际上,我的这个工作非常好,而且一切正常。除了我得到一个 Sh 1. Permission Denied when I open a file。
char filename[4080];
printf("Enter the file you wish to edit: ");
scanf("%s", filename);
char thething[4080];
sprintf(thething, "/usr/local/script/send_it.pl %s",
filename);
system(filename);`
当我运行它时会发生这种情况
pi@raspberrypi ~/JacoShell $ sudo ./shell
JacoShell: /home/pi/JacoShell $nano
Enter the file you wish to edit: /home/pi/JacoShell/test.txt
sh: 1: /home/pi/JacoShell/test.txt: Permission denied
JacoShell: /home/pi/JacoShell $
./shell 被适当地修改了,所以我不知道问题是什么
【问题讨论】:
-
你正在尝试执行
/home/pi/JacoShell/test.txt,而不是nano。 -
@lxg,不,我不是。你听说过 JacoShell 吗?那是因为我正在写它。它会提示您输入文件并将该文件名传递给 nano 显示在代码中
-
...但
system()被定义为调用sh,而不是 JacoShell(或 bash,或 ksh,或任何其他不是sh)。 -
@JacobMisirian 我认为您需要阅读更多关于
system函数的信息。 -
@JacobMisirian,不正确 --
system()不直接调用可执行文件;它是通过一个外壳来实现的。如果您想直接调用可执行文件,请阅读 execve() 系列调用的手册——这就是 real shell 所做的。