리눅스 예제에서 이것이 어떤 것을 의미하나요??

-@Naver의 이미지

#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은 지원을 안하나요??

질문이 많은데 아직 어렵네요....

세벌의 이미지

char fname[1024]; 10

이런 코드는 처음 보는 거 같아요.
소스 코드를 첨부파일로 이미지로 올리는 것보다 텍스트로 올리는 게 좋겠습니다.
첨부파일 대신에 본문에 다 올리면 더 좋겠고요.
-@Naver의 이미지

쓰다가 오타났나봅니다. 10은 원래 없어요 ㅋㅋ 텍스트로 수정할께요!!

chanik의 이미지

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바이트 공간을 주고 파일이름을 복사하는 대신, 아래와 같이 포인터만 정의해서 써도 됩니다.

    char *fname;
    if(argc > 1)
        fname = argv[1];
    else
        fname = argv[0];

st_fstype은 저도 모르겠네요. 아마 일부 플랫폼에서만 지원되는 항목이 아닌가 싶습니다.

-@Naver의 이미지

부가적인 내용은 추가적으로 검색해보겠습니다. 알기 쉽게 설명해 주신 것 같아서 감사합니다!!

김정균의 이미지

st_fstype 는 glibc 에서는 지원하지 않습니다. 아마도 windows 의 stat struct 에서 지원하는 것이 아닐까 싶습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.