리눅스 예제에서 이것이 어떤 것을 의미하나요??
글쓴이: -@Naver / 작성시간: 목, 2020/11/19 - 12:06오전
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> int main(int argc, char *argv[]) { struct stat finfo char fname[1024]; if(argc > 1) strcpy(fname, argv[1]); else strcpy(fname, argv[0]); if(stat(fname, &finfo) == -1) { fprintf(stderr, "Couldn't stat %s \n", fname); exit(1); } printf("%s \n", fname); printf("ID of device: %d \n", finfo.st_dev); printf("Inode number: %d \n", finfo.st_ino); printf("File mode : %o \n", finfo.st_mode); printf("Num of links: %d \n", finfo.st_nlink); printf("User ID : %d \n", finfo.st_uid); printf("Group ID : %d \n", finfo.st_gid); printf("Files size : %d \n", finfo.st_size); printf("Last access time : %u \n", finfo.st_atim); printf("Last modify time : %u \n", finfo.st_mtim); printf("Last stat change : %u \n", finfo.st_ctim); printf("I/O Block size : %d \n", finfo.st_blksize); printf("Num of blocks : %d \n", finfo.st_blocks); printf("File system : %s \n", finfo.st_fstype); } }
아래 fprintf는 전부 출력하는 값이니 알겠는데 위에 if else문이 뭔지 잘 모르겠습니다.
제가 생각 한 것은
값을 줄 argc와 값을 받을 *argv[]인것 같고
struct stat finfo는 구조체멤버의 변수 이름이 finfo이고
fname의 길이는 1024라고 선언한 것이고 (이걸 꼭 선언 해야하나요?? )
그 밑은 잘 모르겠습니다... 맽 밑에 stderr은 에러가 날 경우 stat할 수 없다라는 것은 알 것 같아요.
printf("File system : %s \n", finfo.st_fstype); 이부분은 오타는 없는데 struct stat' has no member named 'st_fstype'라고 오류나서 빼니까 되긴 하는데 st_fstype은 지원을 안하나요??
질문이 많은데 아직 어렵네요....
Forums:
에러 안 나나요?
이런 코드는 처음 보는 거 같아요.
소스 코드를 첨부파일로 이미지로 올리는 것보다 텍스트로 올리는 게 좋겠습니다.
첨부파일 대신에 본문에 다 올리면 더 좋겠고요.
세벌 https://sebuls.blogspot.kr/
아 끝에 10이 들어갔네요...
쓰다가 오타났나봅니다. 10은 원래 없어요 ㅋㅋ 텍스트로 수정할께요!!
argc는 arguments count, argv는
argc는 arguments count, argv는 arguments vector. 프로그램 실행시 command line으로 넘어오는 arguments 문자열 파악에 쓰는 변수입니다. 구글이나 네이버에서 argc argv 검색해보시면 잘 나옵니다.
아무 옵션 없이 실행파일 ./a.out을 실행하면 아래와 같이 되고
argc : 1
argv[0] : "./a.out"
매개변수를 하나 줘서 a.out test.c 라고 실행하면 아래와 같이 되는 식입니다.
argc : 2
argv[0] : "./a.out"
argv[1] : "test.c"
올리신 코드는, 매개변수 없이 실행되면 자기 자신을 stat()하고, 매개변수를 주면 첫 번째 매개변수로 지정된 파일을 stat()하게 됩니다.
그리고, fname에 1024바이트 공간을 주고 파일이름을 복사하는 대신, 아래와 같이 포인터만 정의해서 써도 됩니다.
st_fstype은 저도 모르겠네요. 아마 일부 플랫폼에서만 지원되는 항목이 아닌가 싶습니다.
쉽게 설명해주셔서 감사합니다!!!
부가적인 내용은 추가적으로 검색해보겠습니다. 알기 쉽게 설명해 주신 것 같아서 감사합니다!!
st_fstype 는 glibc 에서는 지원하지
st_fstype 는 glibc 에서는 지원하지 않습니다. 아마도 windows 의 stat struct 에서 지원하는 것이 아닐까 싶습니다.
댓글 달기