게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[C/질문] UNIX 명령어 만들기
게시물ID : programmer_14185짧은주소 복사하기
작성자 : ozum2
추천 : 0
조회수 : 520회
댓글수 : 0개
등록시간 : 2015/10/30 19:56:55
옵션
  • 본인삭제금지
ls -alR 명령어를 만들고 있습니다.
재귀함수를 사용하여 하위 디렉터리까지 탐색하고
파일명을 오름차순 정렬하기 위해 연결리스트를 사용하였습니다.
 
실행 결과
.:
drwxrwxr-x      10      jbshin(1000)    jbshin(1000)    4096    2015-10-29 07:40:08     .
drwxrwxr-x      4       jbshin(1000)    jbshin(1000)    4096    2015-10-28 20:05:09     ..
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-16 23:40:50     hoc1
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-17 00:36:37     hoc2
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-30 17:13:17     hoc3
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-28 22:13:01     hoc3_1
drwxrwxr-x      5       jbshin(1000)    jbshin(1000)    4096    2015-10-28 20:05:17     hw4
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-30 19:53:56     hw5
./hoc1:
drwxrwxr-x      10      jbshin(1000)    jbshin(1000)    4096    2015-10-29 07:40:08     .
drwxrwxr-x      4       jbshin(1000)    jbshin(1000)    4096    2015-10-28 20:05:09     ..
drwxrwxr-x      2       jbshin(1000)    jbshin(1000)    4096    2015-10-16 23:40:50     hoc1
Segmentation fault
 
Segmentation fault 는 물론이고 제일 아래의 hoc1 파일은 디렉터리파일이 아닌데 디렉터리파일로 출력되고, hoc1디렉터리에 다른 파일이 하나 더 있는데 그 파일에서 Segmentation fault 가 뜬 것같습니다.
 
디렉터리파일이 아닌데도 디렉터리로 인식하니까 일반 파일을 opendir 하려고 합니다.
 
어느부분이 문제인지 감이 안잡힙니다.
 
도움 주시면 감사하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
void ls(char *filename)
{
    DIR *dp;
    file *f=0;
    struct dirent *dent;
    struct stat buf;
    char buffer[BUFSIZ];
    if((dp = opendir(filename))== NULL)
    {
        perror("opendir");
        exit(1);
    }
    printf("%s:\n", filename);
    //printf("mode\t\tnlink\tuser(uid)\tgroup(gid)\tsize\tmtime\t\t\tname\n");
    while(dent = readdir(dp))
    {
        lstat(dent->d_name, &buf);
        insert_list(&f, buf.st_mode, buf.st_nlink, buf.st_uid, buf.st_gid, buf.st_size, buf.st_mtime, dent->d_name);
    }
    print_list(&f);
    while(f)
    {
        if(S_ISDIR(buf.st_mode) && strcmp(f->filename, ".")!=0 && strcmp(f->filename, "..")!=0)
        {
            sprintf(buffer, "%s/%s", filename, f->filename);
            printf("\n");
            ls(buffer);
        }
        f = f->next;
    }
    closedir(dp);
}
 
CodeHighligher

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호