运行 在 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 命令和程序非常棘手。
按照这些步骤,您可能会调试您的问题。
- 将程序中编写的git命令输入终端,检查逻辑是否真的有效。 (建议这个,因为你说你是 Linux 的新手)
- 如果有效,请输入 "chmod +x filename.extention" 更改文件的权限。
chmod u+x filename 改变文件权限。
如果你想签出一个分支,但保存更改,请使用 git stash。您可以在返回分支机构时使用 git stash pop 或 git stash apply。
我正在尝试编写一个简单的程序,在 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 命令和程序非常棘手。
按照这些步骤,您可能会调试您的问题。
- 将程序中编写的git命令输入终端,检查逻辑是否真的有效。 (建议这个,因为你说你是 Linux 的新手)
- 如果有效,请输入 "chmod +x filename.extention" 更改文件的权限。
chmod u+x filename 改变文件权限。 如果你想签出一个分支,但保存更改,请使用 git stash。您可以在返回分支机构时使用 git stash pop 或 git stash apply。