忍者ブログ
趣味+メモ用のブログです。 GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
[103] [102] [101] [100] [99] [98] [97] [96] [95] [94] [93]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ファイルアクセスの排他で、セマフォを使おうか、ファイルロックを使おうか
悩んだ末、ファイルロックを使用することで決定。

理由:flockの場合、プロセスが死んだらロック解除されるから(CTRL-C対策)






     1  #include <sys/file.h>
     2
     3  #include <sys/types.h>
     4  #include <sys/stat.h>
     5  #include 
     6  #include 
     7
     8  #include 
     9  // int flock(int fd, int operation);
    10
    11
    12
    13
    14  static int fd = -1;
    15
    16  int filelock_init(const char* path)
    17  {
    18      fd = open(path, O_RDWR|O_CREAT, 00777);
    19      if ( fd < 0 )
    20      {
    21          return -1;
    22      }
    23      return 0;
    24  }
    25
    26  int filelock_fin()
    27  {
    28      if ( fd != -1 )
    29      {
    30          close( fd );
    31      }
    32      fd = -1;
    33      return 0;
    34  }
    35
    36  int filelock_lock_ex()
    37  {
    38      int ret = 0;
    39
    40      ret = flock( fd, LOCK_EX );
    41
    42      return ret;
    43  }
    44
    45
    46  int filelock_lock_sh()
    47  {
    48      int ret = 0;
    49
    50      ret = flock( fd, LOCK_SH );
    51
    52      return ret;
    53  }
    54
    55  int filelock_unlock()
    56  {
    57      int ret = 0;
    58
    59      ret = flock( fd, LOCK_UN );
    60
    61      return ret;
    62  }
    63
    64  int main( void )
    65  {
    66      int ret;
    67
    68      ret = filelock_init( "/tmp/abccfile.lock" );
    69      if ( ret )
    70      {
    71          perror( "filelock_init()" );
    72          return -1;
    73      }
    74
    75      ret = filelock_lock_ex( );
    76      if ( ret )
    77      {
    78          perror( "filelock_lock_ex()" );
    79          return -1;
    80      }
    81      fprintf( stdout, "lock ok \n" );
    82      while ( 1 )
    83      {
    84          sleep(1);
    85      }
    86      ret = filelock_unlock( );
    87
    88      ret = filelock_fin( );
    89
    90      return 0;
    91  }
    92
PR


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
一乗寺 又兵衛
性別:
男性
職業:
コンパイル
趣味:
コンパイル
バーコード
ブログ内検索