Adding the challenge 0403
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
//go:build unix
|
||||
|
||||
package db0403
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// open or create a file and fsync the directory
|
||||
func createFileSync(file string) (*os.File, error) {
|
||||
fp, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0o644)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err = syncDir(path.Base(file)); err != nil {
|
||||
_ = fp.Close()
|
||||
return nil, err
|
||||
}
|
||||
return fp, err
|
||||
}
|
||||
|
||||
func syncDir(file string) error {
|
||||
flags := os.O_RDONLY | syscall.O_DIRECTORY
|
||||
dirfd, err := syscall.Open(path.Dir(file), flags, 0o644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer syscall.Close(dirfd)
|
||||
return syscall.Fsync(dirfd)
|
||||
}
|
||||
|
||||
// QzBQWVJJOUhU https://trialofcode.org/
|
||||
Reference in New Issue
Block a user