可以考慮這樣的方抄法:
一、襲
其實SVN加鎖會在.SVN(
隱藏文件
)中生成一個名字叫lock的文件(無後綴),查找所有的,手工刪除。然後再嘗試更新,系統可能會提示某個.base文件無法訪問。找到它,把相關的文件或其所在的目錄刪除
2. 為什麼在linux上對某個文件加鎖還是可以rm掉
因為加鎖只是防止修改文件,並不能防止刪除文件。
3. linux系統文件夾鎖著怎麼辦
sudo chmod 777 文件夾名字
解鎖
4. linux怎麼把文件同時進行讀寫鎖
讀寫鎖與互斥量類似,不過讀寫鎖的並行性更高。
讀寫鎖可以有三種狀態:()讀模式加鎖;(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;
}
5. 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後文件才能被其他程序訪問,這樣就可以保證文件訪問不沖突。
6. linux鎖定文件
你用chmod 000 文件 試試, 讓文件沒有任何許可權
7. 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或(更常見的)它所包含的頭文件中。
8. Linux 下三種文件鎖 —— fcntl/lockf、flock
因為文件鎖的事踩了點坑(還是在生產環境),花時間了解整理了一下。以下結論基本經過 demo 驗證,先簡略寫寫結論,總結總結歷史,有空再補其他的。
http://man7.org/linux/man-pages/man2/fcntl.2.html
http://man7.org/linux/man-pages/man2/flock.2.html
http://blog.csdn.net/jnu_simba/article/details/8806654
9. 求電腦高手,取消linux右上角鎖文件,求詳細解答,謝謝
可以看到上面的鎖沒有了,對應的也有寫的許可權,也就能刪除了
當然,上面這些只是能改變一個文件或者目錄的許可權,
如果不改變許可權直接執行的話可以用
sudo +命令
臨時切換位上帝模式(root)
10. linux里的文件夾上有個鎖頭的圖標,表示什麼
Linux中帶鎖的文件夾圖標,抄表示您沒有許可權訪問該文件夾。如下圖所示:
當然,你可以使用如下方法解除限制。
一、終端下的操作
sudo chmod -R 777 路徑(文件夾或文件) (以Ubuntu為例)
二、圖形界面的操作
1、右擊這個帶鎖的文件或者文件夾,選擇屬性。
2、切換到「安全」選項卡,點擊「編輯」,選擇「添加」,輸入au再點檢查名稱,系統會自動改名為AuthenticatedUsers,點確定。
3點擊AuthenticatedUsers——完全控制——確定