运行 在 Linux 中编译 C 程序时权限被拒绝

Permission denied when running compiled C program in Linux

我正在尝试编写一个简单的程序,在 Github 存储库上调用 git checkout -- .,这将是一个命令行参数。我想称它为 > 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。我不太熟悉为 Linux 编写程序,所以这可能是一个简单的错误。感谢有关我做错了什么的信息。谢谢。

您传递给 execv 的第一个参数是一个目录,但 execv 需要一个程序。错误 "Permission denied" 有点误导,因为没有 "permission to execute directories".

这样的东西

要更改当前目录,请调用 chdir。然后,调用您想要调用的 exec* 函数中的任何一个 git.

Git 命令和程序非常棘手。

按照这些步骤,您可能会调试您的问题。

  1. 将程序中编写的git命令输入终端,检查逻辑是否真的有效。 (建议这个,因为你说你是 Linux 的新手)
  2. 如果有效,请输入 "chmod +x filename.extention" 更改文件的权限。

chmod u+x filename 改变文件权限。 如果你想签出一个分支,但保存更改,请使用 git stash。您可以在返回分支机构时使用 git stash pop 或 git stash apply。

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