6

txt ファイルから読み取り、次の番号を追加したいのですが、フォークも使用して 2 番目のプロセスとして機能させたいと考えています。次のコードでは、ファイルのロックを解除するために助けが必要です。ファイルのロックを解除できません。

int main() {
  int x;
  pid_t child = fork();
  FILE *file;
  //flock(fileno(file),LOCK_EX);
  file = fopen ("list.txt", "r");
  //printf("file is locked");
  int fdSource = (int)file;
  if (fdSource > 0){
    if (lockf(fdSource, F_LOCK, 0) == -1)
       x = readValue(file);
       return 0; /* FAILURE */
    }
    else {
      return 1;
    }
    if (lockf(fdSource, F_ULOCK, 0) == -1){
       printf("file is not lock");
       appendValue(x);
    }
    else {
       return 1;
    }
    appendValue(x);
}
4

1 に答える 1

4

これに置き換えint fdSource = (int)file;ます:

int fd = fileno(file);

また、UNIX を使用している場合はflock、 ではなくが必要ですlockf。ロックするには、次のようにします。

flock(fd, LOCK_EX);

ロックを解除するには:

flock(fd, LOCK_UN);
于 2012-07-21T17:00:25.570 に答える