마운트 직후 언마운트 수행 프로그램에서 device is busy error.

you의 이미지

안녕하신지요?
제가 짜고 있는 프로그램은
마운트 후에 마운트포인트에 파일과 디렉토리를 만든다음
언마운트 해서 그 마운트포인트에 파일,dir이 존재하지 않는지?
그러고 다시 마운트해서 그 지점에 파일, dir이 존재하는지?
를 알아보는 프로그램인데요
일단 마운트 후에 파일, dir을 만든 후에
언마운트 부분에서
device is busy
에러가 나면서 언마운트가 실패하네요...
이경우는 현재 프로세스가 마운트포인트 내에 있을경우가 그렇지 않나요?
자식 프로세스는 현재 프로그램이 있는 디렉토리에 있지않나요?
거참...모르겠네요...
아시는분 부탁드립니다.

int mount_test1(char *dev, char *mntp, char *mpath, char *upath)
{
  pid_t pid;
  char *file="/mnt/floppy/mnt_test", *dir="/mnt/floppy/mnt_dir";

//마운트 후에 마운트포인트에 파일과 디렉토리를 만듬

  if((pid=fork())<0)
    fprintf(stderr, "error: fork\n");
  else if(pid==0){
    if(run_mount(dev, mntp, mpath)!=0){
      fprintf(stderr, "error: run_cc_mount\n");
      exit(MOUNTERR);
    }
  }
  if(waitpid(pid, NULL, 0)<0)
    fprintf(stderr, "error: wait\n");

  if(cc_touch(file, dir)<0){//파일과 디렉토리 생성
    fprintf(stderr, "error: file creation\n");
    exit(-1);
  }
  else
    fprintf(stdout, "file and directory created\n");

//언마운트 해서 그 마운트포인트에 파일,dir이 존재하지 않는지?

  if((pid=fork())<0)
    fprintf(stderr, "error: fork\n");
  else if(pid==0){
    if(run_umount(mntp, upath)!=0){
      fprintf(stderr, "error: run_umount\n");
      exit(UMOUNTERR);
    }
  }
  if(waitpid(pid, NULL, 0)<0)
    fprintf(stderr, "error: wait\n");

  if(n_check(file, dir)<0){//파일, dir이 존재하지 않는지 검사
    fprintf(stderr, "error: n_check\n");
    exit(UEXISTERR);
  }
  else 
    fprintf(stdout, "umount success: file and dir not exist\n");

//다시 마운트해서 그 지점에 파일, dir이 존재하는지?

  if((pid=fork())<0)
    fprintf(stderr, "error: fork\n");
  else if(pid==0){
    if(run_mount(dev, mntp, mpath)!=0){
      fprintf(stderr, "error: run_cc_mount\n");
      exit(MOUNTERR);
    }
  }
  if(waitpid(pid, NULL, 0)<0)
    fprintf(stderr, "error: wait\n");

  if(e_check(file, dir)<0){
    fprintf(stderr, "error: e_check\n");
    exit(MEXISTERR);
  }
  else 
    fprintf(stdout, "mount success: file and dir do exist\n");
}
mushim의 이미지

프로세스마다 pwd(present working directory) 정보를 가지고 있는데,

부모프로세스로부터 상속받게 됩니다.

실행프로그램의 위치와는 아무 관계가 없습니다.

의심나는 프로세스에서 getcwd 를 호출해보시기 바랍니다.

댓글 달기

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