stat() 함수 사용할때...

boiler4의 이미지

stat(char * path, struct stat * statbuf)
 
path =조사할 파일의 path
 
statbuf = 조사 내용(file size, name, last modification 등등)을 담을 구조체.
 
입니다..
 
근데. 제가 해본 결과..
 
조사할 파일이 이(조사하는 실행) test app 과 같은 directory에 있으면  
정확한 값(ls -al과 비교했을때)을 읽어 오는데.
 
test appcation과 조사할 파일이 서로 다른 디렉토리에 있는 경우에 
file size 값을 제대로 읽어오지 못하네요..
 
왜이런거죠..
제가 뭘 잘 못한건 가요??
 
아래의 code는 주어진 directory에서 찾을려는 
file과 이름이 같은 file이 들어있나 찾아보고
있으면 그 파일의 file size, last modification time 등등을 구해 옮니다.
근데.. 다 잘되는데..딱.. file size 값이 앞서 말한거 처럼
서로 다른 디렉토리에 실행파일과 찾을려는 파일이 있을때 
file size 값만 엉뚱한 값이 나옴니다..
 
 
 
	[code]
if ((dirp = <span>opendir</span>(dirPath)) == NULL) {
       	perror("could not open");
		return 1;
	}
 
	int exist=0;
 
	do {
       	errno = 0;
	        	if (((dp = <span>readdir</span>(dirp)) != NULL) && (exist == 0)) 
	        	{	
	          		if(strcmp (dp->d_name, fileInfo->fileName) == 0)
	          		{
		             	exist = 1;
		              	S_DST_FS_DIR_CONTENT Temp;
		                Temp.dirName = dirPath;
		                Temp.fileName = (char *)dp->d_name; /*pass the file name*/  
		              <span>stat(Temp.fileName, &statbuf); /*working directory default?*/</span>
		               Temp.size = (off_t) statbuf.st_size;
		               Temp.time = (long) statbuf.st_ctime;
		               insertDirContent(fileInfo, &Temp); /* add to linked list!! */ 
		            } 
		}
	} while (dp != NULL);
acekila의 이미지

위의 코드에서 readdir 같은 경우는 diropen()에서 얻은 포인터로 디렉토리의 파일 목록을 읽어들이고 구조체에 저장한 후, 그대로 stat()에 넘겨주고 있습니다.
그렇지만 readdir()이 넘겨주는 파일명들은 경로 정보 없이 단지 파일명만 저장되어 있습니다.

그러면, stat(char * path, struct stat * statbuf)에서 path 값에 파일명만 넘겨 주게 되고 현재 프로그램을 실행한 디렉토리 안에서 해당 file명을 검색할 것이기 때문에 stat()은 error를 리턴 합니다.

위의 코드에서 stat의 리턴 값을 체크하도록 코드를 추가해보세요.

boiler4의 이미지

아.. 그거구나..
완전 감사합니다.

Hello~

Hello~

댓글 달기

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