2014-09-12 2 views
-3

Так что я пишу программу на C, которая является скорее оболочкой, и я пришел к тому, что мне нужно создать команду для открытия файла в nano. У меня на самом деле это работает очень хорошо, и все работает. За исключением того, что я получаю Sh 1. Permission Denied при открытии файла.Как открыть файл в nano в C

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);` 

Когда я запускаю его это то, что происходит

[email protected] ~/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 будет права измененными соответствующим образом я не знаю, в чем проблема

+4

Вы пытаетесь выполнить '/ главная/пи/JacoShell/test.txt' , а не 'nano'. – lxg

+0

@ lxg, нет, я не знаю. Вы когда-нибудь слышали о Жако Шелле? Это потому, что я пишу это. Он запрашивает файл и передает, что имя файла для nano отображается в коде –

+0

Итак, 'system' - это функция, которую вы написали? –

ответ

3

вероятно Вы имели в виду передать thething в system() , не filename. Как написано, ваш код не использует результаты этого sprintf().

Перед тем, как сделать это, хотя, вы можете рассмотреть, что произойдет, если имя файла содержит пробел или другие специальные символы ...

+0

Пространство? Это не страшно. Если ваш файл '/ tmp/$ (rm -rf /)/hello', это более интересно. :) –

+0

Хорошая точка. Отметил. :) – duskwuff

+0

... сказал, поощряя, что кто-то, кто пишет оболочку для использования 'system()' вообще, немного неудачен, - как 'system()' сам вызывает оболочку. –

Смежные вопросы