簡體   English   中英

在Linux中運行已編譯的C程序時權限被拒絕

[英]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 然后,調用您想要調用gitexec*函數之一。

chmod u + x文件名,用於更改文件許可權。 如果要簽出分支但要保存更改,請使用git stash。 當您回到分支機構時,可以使用git stash pop或git stash apply。

https://git-scm.com/docs/git-stash

Git命令和程序非常棘手。

請按照下列步驟,您可能會調試您的問題。

  1. 將程序中編寫的git命令輸入到終端,然后檢查邏輯是否真正起作用。 (正如您所說的那樣,建議您使用Linux)
  2. 如果可行,請通過鍵入“ chmod + x filename.extention”來更改文件的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM