2012-09-09 3 views
0

나는 추출하려는 정보가있는 구조체를 반환하는 stat() - 호출을 만들고 있습니다. 지금까지는 액세스 시간, 파일 수정 및 마지막 변경 시간을 가져올 때까지 필자가 원하는 것을 얻는 데 성공했습니다.세그먼트 화 오류 (ctime을 사용)

나는 그것을 얻기 위해 ctime을 사용하고, printf를 사용하여 그것을 출력하고 싶다.

printf("File: %s",argv[1]); 
    printf("\nSize: %d",result.st_size); 
    printf("  Blocks: %d",result.st_blocks); 
    printf("  IO Block: %d",result.st_blksize); 
    printf("\nDevice: 0x%x",result.st_dev); 
    printf("  Inode: %d",result.st_ino); 
    printf("  Links: %d",result.st_nlink); 
// printf("\nAccess: %s",ctime(result.st_atime)); 

이 코드는 잘 작동하고 다음과 같은 출력을 제공합니다

File: /etc/passwd 
Size: 2250043   Blocks: 4416   IO Block: 4096 
Segmentation fault 
: 내가 액세스 시간을 얻으려면 마지막 행의 주석을 해제하면

File: /etc/passwd 
Size: 2250043   Blocks: 4416   IO Block: 4096 
Device: 0x6804   Inode: 9738432   Links: 1 

, 나는이 출력을 얻을를

어떻게 해결할 수 있습니까? 또한, 내가 어떻게 세그먼트 화 오류가 발생하는지 전에 장치, 노드 및 링크가 인쇄됩니까? 인쇄해서 세그먼테이션 오류를 생성하면 안됩니까?

저는 C의 경험이 거의 없습니다. 저는 이전 과정에서 어셈블리를 공부했지만 매우 간단합니다. time.h의 API를 읽으려고했지만 실제로 해결책을 찾지 못했습니다.

도움이나 조언을 제공해 주셔서 감사합니다.

감사 Z

+0

의 printf를 잊지 마세요. 개행 문자가 표시 될 때까지 아무 것도 인쇄되지 않습니다 (기본값). 줄 바꿈이 실패한 마지막 printf이므로 장치 줄이 화면에 나타나지 않습니다. –

답변

3

ctimeconst time_t *는 기대 함수. 당신은 아마 원하는 :

printf("\nAccess: %s",ctime(&result.st_atime)); 
          ^
4

ctime(&result.st_atime) 

을 사용하십시오 일반적으로 라인 버퍼링

#include <time.h> 
+1

감사합니다. #include ! –

+0

@Zyril : 범위에서'ctime()'을위한 프로토 타입없이 컴파일하고 있습니까? ('-Werror = missing-prototypes' 또는 적어도'-Wall') 범위에있는 프로토 타입없이 코드를 컴파일 할 수 없도록 컴파일 경고를 설정해야합니다. 개판 이구만. 그것은 자기 보호 조치입니다. –

+0

안녕하세요 조나단! 이것은 커널이 작동하는 방식을 이해하기 위해 취하는 과정이며 시스템 호출을보고 있습니다. stat 반환하는 구조체의 데이터를 인쇄하는 C 함수를 작성하고 싶습니다. 저는이 부분에 익숙하지 않으므로 프로토 타입으로 무엇을 의미하는지 확신 할 수 없습니다. 컴파일 경고가 없습니다. –

관련 문제