53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package sharememory
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func main() {
|
|
// 打开文件
|
|
file, err := os.OpenFile("testfile.txt", os.O_RDWR|os.O_CREATE, 0o666)
|
|
if err != nil {
|
|
fmt.Println("Error opening file:", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
// 加独占锁
|
|
fmt.Println("Acquiring exclusive lock...")
|
|
err = unix.Flock(int(file.Fd()), unix.LOCK_EX)
|
|
if err != nil {
|
|
fmt.Println("Error acquiring exclusive lock:", err)
|
|
return
|
|
}
|
|
defer unix.Flock(int(file.Fd()), unix.LOCK_UN) // 释放锁
|
|
|
|
fmt.Println("Exclusive lock acquired. Writing to file...")
|
|
// 这里可以添加写文件的逻辑
|
|
fmt.Println("Writing complete.")
|
|
|
|
// 打开文件
|
|
file, err = os.OpenFile("testfile.txt", os.O_RDONLY, 0o666)
|
|
if err != nil {
|
|
fmt.Println("Error opening file:", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
// 加共享锁
|
|
fmt.Println("Acquiring shared lock...")
|
|
err = unix.Flock(int(file.Fd()), unix.LOCK_SH)
|
|
if err != nil {
|
|
fmt.Println("Error acquiring shared lock:", err)
|
|
return
|
|
}
|
|
defer unix.Flock(int(file.Fd()), unix.LOCK_UN) // 释放锁
|
|
|
|
fmt.Println("Shared lock acquired. Reading from file...")
|
|
// 这里可以添加读文件的逻辑
|
|
fmt.Println("Reading complete.")
|
|
}
|