可以考慮這樣的方法:
一、
其實SVN加鎖會在.SVN(
隱藏文件
)中生成一個名字叫lock的文件(無後綴),查找所有的,手工刪除。然後再嘗試更新,系統可能會提示某個.base文件無法訪問。找到它,把相關的文件或其所在的目錄刪除
❷ 文件被鎖定了怎麼辦
以wps為例, 文件被鎖定的解決方法如下:
首先打開文件,會發現無法進行編輯;點擊菜單欄的審閱,點擊限制編輯;點擊後會彈出一項內容,點擊停止保護;彈出密碼欄,輸入密碼,點擊確定即可。
WPS Office是由金山軟體股份有限公司自主研發的一款辦公軟體套裝,可以實現辦公軟體最常用的文字編輯、表格、演示稿等多種功能。WPS Office具有內存佔用低、運行速度快、體積小巧、強大插件平台支持、免費提供海量在線存儲空間及文檔模板等優點,覆蓋Windows、Linux、Android、iOS等平台。
文件鎖定狀態是目前不可編輯。因為在編輯中文檔,文件還是在打開狀態,並沒有關閉,再打開一次,就會出現「該文件正處於鎖定狀態」無法編輯了,需要重新關了電腦再打開,就可以了。如果不行的話,還可以另存為一個副本,將原來的刪了就可以了。
❸ Linux下怎麼創建鎖文件及相關命令
方法鎖文件僅僅是充當一個指示器的角色,程序間需要通過相互協作來使用它們。鎖文件只是建議性鎖,與此對立的是強制性鎖。 為創建一個用作指示器的文件,我們使用帶O_CREATE和O_EXCL標志的open系統調用。這將使我們以一個原子操作同時完成兩項工作:確定文件不存在,然後創建它。 實現//file : lock.c #i nclude #i nclude #i nclude #i nclude #i nclude int main(){int file_desc; int save_errno; file_desc = open(/tmp/LockFile.test, O_RDWR O_CREAT O_EXCL, 0444); if (file_desc < 0){save_errno = errno; printf(Open failed with error is %dn, save_errno);}else {printf(Open succeededn);}exit(EXIT_SUCCESS);}第一次運行程序:$ lock輸出如下: Open succeeded 我們再次運行程序:$ lock輸出如下: Open failed with error is 17分析:第一次運行程序時,由於文件並不存在,所以執行成功。對於後續的執行,因為文件已經存在而失敗了。若想程序再次執行成功,必須刪除鎖文件。 在Linux系統中,通常錯誤號碼17代表的是EEXIST,此錯誤用以表示一個文件已存在。錯誤號定義在頭文件errno.h或(更常見的)它所包含的頭文件中。
❹ Linux下怎麼創建鎖文件及相關命令
方法 鎖文件僅僅是充當一個指示器的角色,程序間需要通過相互協作來使用它們。鎖文件只是建議性鎖,與此對立的是強制性鎖。 為創建一個用作指示器的文件,我們使用帶O_CREATE和O_EXCL標志的open系統調用。這將使我們以一個原子操作同時完成兩項工作:確定文件不存在,然後創建它。 實現 //file : lock.c #i nclude #i nclude #i nclude #i nclude #i nclude int main() { int file_desc; int save_errno; file_desc = open(/tmp/LockFile.test, O_RDWR O_CREAT O_EXCL, 0444); if (file_desc < 0) { save_errno = errno; printf(Open failed with error is %dn, save_errno); } else { printf(Open succeededn); } exit(EXIT_SUCCESS); } 第一次運行程序: $ lock 輸出如下: Open succeeded 我們再次運行程序: $ lock 輸出如下: Open failed with error is 17 分析: 第一次運行程序時,由於文件並不存在,所以執行成功。對於後續的執行,因為文件已經存在而失敗了。若想程序再次執行成功,必須刪除鎖文件。 在Linux系統中,通常錯誤號碼17代表的是EEXIST,此錯誤用以表示一個文件已存在。錯誤號定義在頭文件errno.h或(更常見的)它所包含的頭文件中。
❺ 為什麼在linux上對某個文件加鎖還是可以rm掉
因為加鎖只是防止修改文件,並不能防止刪除文件。
❻ linux怎麼把文件同時進行讀寫鎖
讀寫鎖與互斥量類似,不過讀寫鎖的並行性更高。
讀寫鎖可以有三種狀態:(1)讀模式加鎖;(2)寫模式加鎖;(3)不加鎖。
在寫加鎖狀態時,在解鎖之前,所有試圖對這個鎖加鎖的線程都會被阻塞。在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的線程都可以得到訪問許可權。但是如果線程希望以寫模式加鎖,它必須阻塞,直至所有的線程釋放讀鎖。
讀寫鎖很適合於對數據結構讀的次數遠大於寫的情況。
相關函數:
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock) // 成功則返回0,失敗則返回錯誤代碼
int pthread_rwlock_rdlock(pthread_rwlock_t *restrict rwlock) ;//讀模式加鎖
int pthread_rwlock_wrlock(pthread_rwlock_t *restrict rwlock);//寫模式加鎖
int pthread_rwlock_unlock(pthread_rwlock_t *restrick rwlock);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *restrict rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *restrict rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *restrict rwlock);
相關示例:讀者寫者問題,這也是一個很經典的多線程題目,題目大意:有一個寫者多個讀者,多個讀者可以同時讀文件,但寫者在寫文件時不允許有讀者在讀取文件,同樣有讀者讀文件時
#include <stdio.h>
#include <pthread.h>
#define Read_Num 2
pthread_rwlock_t lock;
class Data
{
public:
Data(int i, float f): I(i),F(f)
{}
private:
int I;
float F;
};
Data *pdata = NULL;
void *read(void * arg)
{
int id = (int)arg;
while(true)
{
pthread_rwlock_rdlock(&lock);
printf(" reader %d is reading data!\n", id);
if(data == NULL)
{
printf("data is NULL\n");
}
else
{
printf("data: I = %d, F = %f \n", pdata->I, pdata->F);
}
pthread_rwlock_unlock(&lock);
}
pthread_exit(0);
}
void *write()
{
while(true)
{
pthread_rwlock_wrlock(&lock);
printf(" writer is writind data!\n");
if(pdata == NULL)
{
pdata = new Data(1, 1.1);
printf("Writer is writing data: %d, %f\n", pdata->I, pdata->F);
}
else
{
delete pdata;
pdata = NULL;
printf("writer free the data!");
}
pthread_rwlock_unlock(&lock);
}
pthread_exit(0);
}
void main()
{
pthread_t reader[Read_Num];
pthread_t writer;
for(int i = 0;i<Read_Num;i++)
{
pthread_create(&read[i],NULL,read,(void *)i);
}
pthread_create(writer, NULL, write, NULL);
sleep(1);
return 0;
}
❼ 操作系統,linux中 lockf(1,1,0);和 lockf(1,0,0); 是什麼作用
ockf(fd,1,0)是給fd文件上鎖,lockf(fd,0,0)是解鎖,配合使用,實現進程的互斥。
頭文件
#include <sys/file.h>
函數:
int lockf(int fd, int cmd, off_t len);
fd -- 文件id.
fcntl(2)的介面(inteface)函數
返回1表示調用lockf成功.
lockf用於鎖定或打開鎖定一個共享文件.
操作有:
F_LOCK(鎖定),F_TLOCK,F_ULOCK(打開鎖定),F_TEST
注意事項
lockf()函數允許將文件區域用作信號量(監視鎖),或用於控制對鎖定進程的訪問(強制模式記錄鎖定)。試圖訪問已鎖定資源的其他進程將返回錯誤或進入休眠狀態,直到資源解除鎖定為止。當關閉文件時,將釋放進程的所有鎖定,即使進程仍然有打開的文件。當進程終止時,將釋放進程保留的所有鎖定。
函數聲明:
/* 'lockf' is a simpler interface to the locking facilities of 'fcntl'. LEN is always relative to the current file position. The CMD argument is one of the following. This function is a cancellation point and therefore not marked with __THROW. */
#include <unistd.h>
int lockf(int fd, int cmd, off_t len);
❽ linux shell中的加鎖
flock的選項-n等同於--nonblock,表示非阻塞模式。man flock可以看到詳細說明:
Fail (with an exit code of 1) rather than wait if the lock cannot be immediately acquired.
翻譯過來就是,若不能立即獲得文件鎖,就直接出錯返回1而不是繼續等待(默認flock是會繼續等待直到獲得文件鎖)。
3就是fd(即文件描述符)。
文件鎖只是用於防止多個程序同時訪問一個文件的沖突情況。
Shell自動分配fd的話,原本就不會使用已被佔用的fd,而是自動遞增。
這里顯式指定fd為3(3<>mylockfile),是為了flock有操作的對象。只有unlock後文件才能被其他程序訪問,這樣就可以保證文件訪問不沖突。