Linux ½ø³Ì»¥³âÁ¿
ÍøÉÏÕÒÁËÏÂLinux½ø³Ì¼ä»¥³âµÄʵÏÖ£¬Á½ÖÖ·½·¨£¬semaphore ºÍ ÎļþËø¡£¸Õ¿ªÊ¼Ò²³¢ÊÔÓÃsemaphoreÀ´ÊµÏÖ£¬µ«·¢ÏÖsem_waitºÍsingalÎÞ·¨ÊµÏÖWindowsÏÂCirtSec£¬¶ø²ÉÓÃÁ˺óÕßÎļþËø£»
µ«¶ÔÓÚ¶ÁÐ´ËøÀ´ËµÊµÓÃÎļþËøÊµÏÖ£¬´æÔÚÒ»¶¨µÄ²»×㣬Ëü·Ö¿ªÁ˶ÁÐ´Ëø£¬¶øÃ»Óзֿª½â¶ÁÐ´Ëø£¬ÀûÓÃUnLockÀ´Í³Ò»½â¶ÁÐ´Ëø£¬¶ÔÓÚÕâ½ø³Ì¼ä¶ÁÐ´ËøµÄʵÏÖ£¬»¹ÐèÒªÔÙ½øÒ»²½Á˽â²Å¿É£¡
»ùÓÚÎļþËø¶øÊµÏֵĽø³Ì¼ä»¥³â
/*
* File: MProcessCritSec.h
* Author: root
*
* Created on 2010Äê5ÔÂ13ÈÕ, ÉÏÎç4:37
*/
#ifndef _MPROCESSCRITSEC_H
#define _MPROCESSCRITSEC_H
#include <fcntl.h>
#include <string>
using namespace std;
class MProcessCritSec
{
public:
MProcessCritSec(char *pFileName);
virtual ~MProcessCritSec();
public:
/*
* Ëø
*/
bool Lock();
/*
* ½âËø
*/
bool UnLock();
/*
* ·Ç×èÈûËø
*/
bool TryLock(int nWaitTime = 60);
/*
* ÅжÏËøµÄ״̬
*/
bool IsLock();
private:
//
flock m_lock;
//
int m_nLockValue;
//
bool m_bLocked;
//
string m_strFilePath;
};
#endif /* _MPROCESSCRITSEC_H */
/*
* File: MProcessCritSec.cpp
* Author: root
*
* Created on 2010Äê5ÔÂ13ÈÕ, ÉÏÎç4:37
*/
#include "MProcessCritSec.h"
#include <errno.h>
using namespace std;
MProcessCritSec::MProcessCritSec(char *pFileName)
:m_bLocked(false)
{
m_bLocked = false;
m_strFilePath.append("/tmp/");
m_strFilePath.append(pFileName);
m_nLockValue = open(m_strFilePath.c_str(), O_WRONLY|O_CREAT, 0777);
}
MProcessCritSec::~MProcessCritSec()
{
close(m_nLockValue);
remove(m_strFilePath.c_str());
}
/*
* º¯Êý×÷ÓãºËø
* º¯Êý²ÎÊý£º
* º¯Êý·µ»Ø£º
* bool
*/
bool MProcessCritSec::Lock()
{
m_lock.l_type = F_WRLCK;
m_lock.l_whence = SEEK_SET;
m_lock.l_start = 0;
m_lock.l_len = 0;
if ( fcntl(m_nLockValue, F_SETLKW, &m_lock) != 0 )
return false;
m_bLocked = true;
return true;
}
/*
* º¯Êý×÷ÓÃ
Ïà¹ØÎĵµ£º
1.failed to open PAM security session: No such file or directory
Òì³£ÃèÊö:²é¿´/var/log/cronʱ»á·¢ÏÖÈçÏÂÒì³£ÈÕÖ¾
May 14 09:10:01 localhost crond[20319]: (CRON) /export/home/username (No such file or directory)
May 14 09:10:01 localhost crond[20319]: CRON (username) ERROR: failed to open PAM securi ......
¶ÔÓÚÒ»°ãÓû§À´Ëµ£¬Ö÷Ŀ¼£¨home directory£©ÊÇÓ²ÅÌÉÏΨһ¿ÉÒÔÔÀ´Ð´¶«Î÷µÄµØ·½¡£Ò»°ãµÄ·¾¶ÃûÊÇ/home/login_user_name¡£
Ö÷Ŀ¼ÓÃÓÚ´æ´¢¸÷ÖÖÓû§Îļþ£ºÉèÖÃÎļþ£¬³ÌÐòÅäÖÃÎļþ£¬Óû§Îĵµ£¬Êý¾Ý netscape µÄ»º´æ£¬ÓʼþµÈµÈ¡£×÷Ϊһ¸öÆÕͨÓû§£¬Äã¿ÉÒÔÔÚÖ÷Ŀ¼Ï½¨Á¢ÐµÄĿ¼°²ÅÅÄã×Ô¼ºµÄĿ¼½á¹¹¡£ÆäËûÓû§ÎÞ·¨ÔĶÁÄãµÄ ......
½ñÌì±»ÅóÓÑÎʼ°“LinuxÏ¿ÉÒÔÌæ»»ÔËÐÐÖеijÌÐòô£¿”£¬ÒÔǰÒÀÏ¡¼ÇµÃLinuxÏÂÊÇ¿ÉÒԵ썶øWindows¾Í²»Èã©£¬ÓÚÊÇËæ¿Ú´ðµÀ“OK”¡£½á¹ûÅóÓÑ·¢À´Ò»¸öÖ´Ðнá¹û£º£¨testÕýÔÚÔËÐÐÖУ©
# cp test2 test
cp: cannot create regular file `test': Text file busy
¿´ÆðÀ´ÊdzÌÐò±»Õ¼Óã¬ÎÞ·¨¸²¸Ç¡£ÓÚÊÇ×Ô¼ºÓÖÔÙ× ......
ÔÚLinuxÖУ¬Èç¹ûÒªÈýø³ÌÔÚºǫ́ÔËÐУ¬Ò»°ãÇé¿öÏ£¬ÎÒÃÇÔÚÃüÁîºóÃæ¼ÓÉÏ&¼´¿É£¬Êµ¼ÊÉÏ£¬ÕâÑùÊǽ«ÃüÁî·ÅÈëµ½Ò»¸ö×÷Òµ¶ÓÁÐÖÐÁË£º
$ ./test.sh &
[1] 17208
$ jobs -l
[1]+ 17208 Running ./test.sh &
¶ÔÓÚÒѾÔÚǰִ̨ÐеÄÃüÁҲ¿ÉÒÔÖØÐ·ŵ½ºǫִ́ÐУ¬Ê×ÏȰ´ctrl+zÔÝÍ£ÒѾÔËÐеĽø³Ì£¬È ......
¾²Ì¬º¯Êý¿âÊÇÔÚ³ÌÐòÖ´ÐÐǰ¾Í¼ÓÈ뵽Ŀ±ê³ÌÐòÖÐÈ¥ÁË£»¶ø¹²Ïíº¯Êý¿âÔòÊÇÔÚ³ÌÐòÆô¶¯µÄʱºò¼ÓÔØµ½³ÌÐòÖУ¬Ëü¿ÉÒÔ±»²»Í¬µÄ³ÌÐò¹²Ïí£»¶¯Ì¬¼ÓÔØº¯Êý¿âÔò¿ÉÒÔÔÚ³ÌÐòÔËÐеÄÈκÎʱºò¶¯Ì¬µÄ¼ÓÔØ¡£
¾²Ì¬º¯Êý¿âʵ¼ÊÉϾÍÊǼòµ¥µÄÒ»¸öÆÕͨµÄÄ¿±êÎļþµÄ¼¯ºÏ£¬Ò»°ãÀ´ËµÏ°¹ßÓÓ.a”×÷ΪÎļþµÄºó׺¡£¿ÉÒÔÓÃarÕâ¸ö³ÌÐòÀ´²úÉú¾²Ì¬º¯Êý ......