[英]Permission denied when running compiled C program in Linux
我試圖編寫一個簡單的程序,調用git checkout -- .
在Github倉庫中,這將是命令行參數。 我想稱它為> clearRepo repoName
。 我將所有存儲庫保存在同一個Github目錄中。
代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
void print_error()
{
fprintf(stderr, "Error executing: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
void print_usage(char* this)
{
printf("SYNTAX ERROR:\n%s [directoryName]\n", this);
exit(EXIT_FAILURE);
}
int main(int argc, char **argv)
{
if(argc != 2)
{
print_usage(argv[0]);
}
pid_t pid = fork();
if (pid == 0)
{
static char* params[] = {"git", "checkout", "--", ".", NULL};
char s[50], s2[50];
strcpy(s, "/home/myname/Documents/Github/");
strcpy(s2, argv[1]);
strcat(s, s2);
printf("s: %s\n", s);
int err = execv(s, params);
if(err == -1)
{
print_error();
}
exit(127);
}
else
{
waitpid(pid, 0, 0);
}
return 0;
}
它可以正常編譯,但是print_error()會吐出Error executing: Permission denied
每次運行該Error executing: Permission denied
。 我不太熟悉為Linux編寫程序,因此這可能是一個簡單的錯誤。 感謝您提供有關我在做什么的信息。 謝謝。
您要傳遞給execv
的第一個參數是目錄,但是execv
需要一個程序。 錯誤“權限被拒絕”有點誤導,因為沒有諸如“執行目錄的權限”之類的東西。
要更改當前目錄,請調用chdir
。 然后,調用您想要調用git
的exec*
函數之一。
chmod u + x文件名,用於更改文件許可權。 如果要簽出分支但要保存更改,請使用git stash。 當您回到分支機構時,可以使用git stash pop或git stash apply。
Git命令和程序非常棘手。
請按照下列步驟,您可能會調試您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.