lstat에서 일반파일을 디렉토리로 취급합니다.

shutup의 이미지

아래 코드패드 링크에 첨부된 코드는 이해를 돕기위해 첨부했습니다.
문제가 되는 부분은 lrank_nodeCheck함수에 있는 106라인 lstat입니다.
http://codepad.org/m25p0MBh

보니, 자꾸 link나 regular 파일들을 directory로 잘못 인식하는것 같습니다.
우분투 14.03과 Cygwin에서 테스트해봤는데 둘이 똑같습니다.

gdb로 들여다보니 lstat이 실행된 뒤 st_mode가 일반 파일임에도 디렉토리의 값을 가집니다.
선행 코드에서 문제가 있는것 같은데, 감을 못잡겠네요.

lstat대신 stat함수를 써도 결과는 똑같고, 저는 링크의 원본의 내용을 보고싶지는 않습니다. 그래서 stat함수는 쓰지 않으려 합니다.
이 프로그램의 목적이 루트 아래의 모든 파일의 사이즈를 재서 파일로 출력해주는거라서요.

보니 https://kldp.org/node/60668 이 질문에서도 이 문제를 언급한것 같은데, 그분은 해결하셨을런지 모르겠네요.

어디서 문제가 되서 lstat에 잘못 전달된건지 알려주세요.

bushi의 이미지

stat() 이건 lstat() 이건, return 값을 체크하세요.

익명 사용자의 이미지

모바일이라 익명으로 글씁니다

리턴값이라.. 글쎄요.일단은 하는게 낫겠네요

익명 사용자의 이미지

그냥 d_name 쓰지 마시고 fullname + d_name 쓰셔야 할 듯..

익명 사용자의 이미지

아뇨 그런 문제는 아니에요.무엇보다 fullname은 현재 노드가 디렉토리에 해당될때만 만들어지기 때문에, 일반파일인데 fullname이 만들어지는것부터가 문제가 있죠.

ymir의 이미지

위에 두 분 말씀 좀 더 깊이 생각해 보시는게 좋을것 같군요.

struct dirent 의 d_name 에는 basename 만 들어가 있습니다.
lstat 에 entry->d_name 만 던지면 CWD 에서 d_name 을 찾을 거고 없으면 에러가 나겠죠.
lstat 이 에러를 리턴했다면 st_mode 에 무슨 값이 있던지 아무런 의미가 없습니다.
아마도 아무런 값을 세팅하지 않고 리턴할 테니.. 이전에 썼던 값들이 고스란히 남아 있을겁니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.