2009-06-16 90 views
6

經過半個小時的PHP源頭摔跤後,我放棄了。 :P問題是 - PHP flock()函數在Gentoo Linux系統上調用了哪些系統調用?我遇到了一些問題(比如塊爲30秒 - 每20個循環迭代類問題),我想知道爲什麼會這樣。PHP flock() - 引擎蓋下有什麼?

回答

0

除非我誤解了你的問題,否則PHP的flock()是Gentoo上Unix系統函數flock()的調用。它們具有相同的語義。

+0

語義 - 是的。但它真的叫flock()嗎? – 2009-06-16 14:16:09

+0

我無法證明它,因爲我現在沒有運行PHP的副本,但我相信是的,是的。爲什麼不用strace自己試試呢? – 2009-06-16 14:25:00

+1

我只有FTP訪問服務器。 – 2009-06-16 14:28:14

3

// example: $stream = fopen(FILE, 'rb') or die('???'); 
$md = stream_get_meta_data($stream); 
echo $md['wrapper_type'];
flock($stream);
如果打印 plainfile那麼調用php函數flock()由調用flock()的php_stdiop_set_option(...)處理。取決於PHP是否使用HAVE_FLOCK編譯,這可能是系統調用 flock()或flock_compat.c中定義的函數,該函數使用 fcntl()。在我的gentoo系統上,PHP是用HAVE_FLOCK編譯的。

主/流/ plain_wrapper.c @靜態INT php_stdiop_set_option(...):

  case PHP_STREAM_OPTION_LOCKING: 
      if (fd == -1) { 
       return -1; 
      } 

      if ((zend_uintptr_t) ptrparam == PHP_STREAM_LOCK_SUPPORTED) { 
       return 0; 
      } 

      if (!flock(fd, value)) { 
       data->lock_flag = value; 
       return 0; 
      } else { 
       return -1; 
      } 
      break;