我尝试使用execvp创建一个作为参数给出的存储库。但我得到一些我无法通过以下代码解决的段错(核心转储):
#include <sys/stat.h> //mkdir
#include <sys/types.h>
#include <stdio.h> //perror
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX 10
int main(int argc, char *argv[]) {
int i;
char *args[6] = {"tar","-xzvf", strcpy(args[2],argv[0]), "-C", "/home/bg/Desktop /Project/", NULL};
FILE *fp;
char *line = (char *)malloc(sizeof(char));
char *result = (char *)malloc(sizeof(char));
size_t len = 0;
ssize_t read;
char* strings[MAX];
int result_code = mkdir("/home/bg/Desktop/Project/", 0777);
umask(mask);
if(result_code ==-1) {
perror(argv[0]);
printf("Erreur dans la création du répertoire/n");
exit(EXIT_FAILURE);
}
if(result_code==0){
printf("Le répertoire a bien été crée \n");
execvp(*args,args);
fp = fopen("/home/bg/Desktop/Project/meta", "r");
if (!fp) {perror("problème avec le fichier");
fprintf(stderr, "Erreur dans l'ouverture du fichier\n");
exit(EXIT_FAILURE);
}
while ((read = getline(&line, &len, fp)) != -1) {
printf("On récupère une ligne de taille %zu :\n", read);
printf("%s", line);
if(strchr (line,'#') != NULL) {
}
else if (strchr (line,'$') != NULL) {
strings[i] = strdup(line);
i++;
}
else if (strchr (line,'>') != NULL) {
result = strdup(line);
}
}
unlink("meta");
free(line);
free(result);
exit(EXIT_SUCCESS);
}
}
我尝试使用char **,但execvp并不适合它。 谢谢你的帮助。
答案 0 :(得分:0)
我发现以下代码存在问题:
char *args[6] = {"tar","-xzvf", strncpy(args[2],argv[0]), "-C", "/home/bg/Desktop /Project/", NULL};
具体来说,strncpy
有两个原因:1)strncpy()
有三个参数,你只指定了2,而且2)它正在尝试复制argv[0]
(程序) name)到args[2]
,这是一个指针数组,而不是包含程序名称的缓冲区。