mkdir 함수 구현하는데요.. 링크부분에서 에러가 나네요..

jinsang의 이미지

#include
#include
#include
#include
#include
#include

int Errors =0;

void mkdirs(char*);

int main(int argc ,char* argv[])
{
if(argc<2){
fprintf(stderr,"mkdir: arg count\n");
exit(2);
}
while(--argc)
mkdirs(*++argv);
exit(Errors?2:0);
}

void mkdirs(char* d)
{
char pname[128],dname[128];
register i, slash=0;
int result;
pname[0]='\0';
for(i=0;d[i];++i)
if(d[i]=='/')
slash =i+1;
if(slash)
strncpy(pname,d,slash);
strcpy(pname+slash,".");

if(access(pname,02)){
fprintf(stderr,"mkdir:cannot access %s\n",pname);
++Errors;
return;
}
result=mknod(d,S_IRWXU,0);
if(result<0){
fprintf(stderr,"mkdir: cannot make directory %s\n",d);
++Errors;
return;
}
chown(d,getuid(),getgid());
strcpy(dname,d);
strcat(dname,"/.");

if((link(d,dname))<0){ /* <-------요부분에서 */
fprintf(stderr,"1 mkdir:cannot link %s\n",dname);
unlink(d);
++Errors;
return;
}
strcat(dname,".");
if((link(pname,dname))<0){
fprintf(stderr,"2 mkdir:cannot link %s\n",dname);
dname[strlen(dname)]='\0';
unlink(dname);
unlink(d);
++Errors;
}
}

<------- 이렇게 주석처리한 부분에서 에러가 나거든요?
이게 디렉토리를 생성하면 . 디렉토리와 .. 디렉토리 를 하드링크 시키는건데
(엄밀하게 말하자면 디렉토리도 파일이지만 지금은 그걸 따지는게 아니니까요..)
왜 에러가 나는지 모르겠어요^^;;;; 초보자인 제게 도움을 주세요~
환경은 ubuntu 입니다.
헤더파일이 안나오네요..;;
stdio.h,stdlib.h,string.h,sys/stat.h,sys/types.h 입니다.

bushi의 이미지

에러코드 확인해보시지요.
귀찮으면 perror(); 만 하셔도 됩니다.

LINK(2)                    리눅스 프로그래머 매뉴얼                    LINK(2)
 
이름
       link - 파일에 대한 새로운 이름을 만든다.
 
사용법
       #include <unistd.h>
 
       int link(const char *oldpath, const char *newpath);
 
설명
       link는존재하는 파일에 새로운 연결(하드 링크로 알려진)을 만든다.
 
       만일 newpath가존재한다면 그것은 덮어 씌우지 않는다.  새로운 이름은 어떠
       한 작동에서든지 예전 것과 동일하게 사용된다; 두 개의 이름은 같은 파 일(
       같 은 허가권과 소유권)을 참조하며 어떤 것이 ‘원본’이라고 말하기 어렵다.
 
반환값
       성공시, 0을 반환한다. 에러시, -1을 반환하며, errno는적당한 값으로 설 정
       된다.
 
...
 
역자
       정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 28일

OTL

jinsang의 이미지

에러 메시지가.. Not a directory
라고 나오네요^^;;;;

...

댓글 달기

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