gpt4 book ai didi

c - 用c实现unix ls函数

转载 作者:行者123 更新时间:2023-11-30 16:29:17 26 4
gpt4 key购买 nike

我需要为我的学校项目重新创建 unix ls 函数,当我将文件作为参数传递时,我可以显示文件的统计信息,但是当我尝试将其放在 while 循环中时,它会给我一个段错误。它需要在 while 循环上,以便我可以直接读取所有文件,而不必将它们作为参数传递

void  ft_perm(char *star)
{
struct stat fileStat;
if(stat(star,&fileStat) < 0)
return;
printf((S_ISDIR(fileStat.st_mode)) ? "d" : "-");
printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-");
printf( (fileStat.st_mode & S_IWUSR) ? "w" : "-");
printf( (fileStat.st_mode & S_IXUSR) ? "x" : "-");
printf( (fileStat.st_mode & S_IRGRP) ? "r" : "-");
printf( (fileStat.st_mode & S_IWGRP) ? "w" : "-");
printf( (fileStat.st_mode & S_IXGRP) ? "x" : "-");
printf( (fileStat.st_mode & S_IROTH) ? "r" : "-");
printf( (fileStat.st_mode & S_IWOTH) ? "w" : "-");
printf( (fileStat.st_mode & S_IXOTH) ? "x" : "-");
return;
}

char *ft_group(char *tim)
{
int i;
int j;
char *s;

s = (char *)malloc (sizeof(char) * 16);
i = 3;
j = 0;
while( i < 16 )
{
s[j] = tim[i];
i++;
j++;
}
return(s);
}

int count ()
{
DIR *dir;
struct dirent *sd;
int i;

dir = opendir(".");
if (!dir)
{
printf("error");
exit(1);
}
i = 0;
while((sd = readdir(dir) ))
{
i++;
}
return(i);
}

int main(int argc, char **argv)
{
struct stat statbuf;
struct group *grp;
struct passwd *pwd;
pwd = getpwuid((geteuid()));
struct dirent **sd;
;
int i = 1;
int r = 1;
while( r < 10)
{
stat(sd[i]->d_name,&statbuf);

ft_perm(sd[i]);
printf("1 %s",pwd->pw_name);

if ((grp = getgrgid(statbuf.st_gid)) != NULL)
printf(" %-8.8s", grp->gr_name);
else
printf(" %-8d", statbuf.st_gid);
printf(" %d", (int)statbuf.st_size);
printf(" %s\n", ft_group(ctime(&statbuf.st_atime)));
r++;
i++;
}
}

最佳答案

您没有将内存分配给struct dirent **sd;并访问它sd[i]。它将导致未定义的行为。

考虑以下分配内存的代码。

struct dirent **sd = malloc(10*sizeof(struct dirent *));

关于c - 用c实现unix ls函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51927438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com