Слияние кода завершено, страница обновится автоматически
package gitee
import (
"bufio"
"bytes"
"os"
"syscall"
)
// PathDirExists todo
func PathDirExists(p string) bool {
st, err := os.Stat(p)
if err != nil {
return false
}
return st.IsDir()
}
func FileIsOpened(path string) bool {
file, err := os.Open(path)
if err != nil {
return false
}
defer file.Close()
fd := file.Fd()
lock := syscall.Flock_t{
Start: 0,
Len: 0,
Type: syscall.F_WRLCK,
Whence: int16(os.SEEK_SET),
}
// Attempt to set a write lock on the file without blocking (F_SETLK)
if err := syscall.FcntlFlock(fd, syscall.F_SETLK, &lock); err != nil {
if errno, ok := err.(syscall.Errno); ok && errno == syscall.EAGAIN {
// The file is locked by another process
return true
}
}
// The file is not locked by another process, or we were able to lock it
return false
}
// PathExists path exists
func PathExists(p string) bool {
if _, err := os.Stat(p); os.IsNotExist(err) {
return false
}
return true
}
// ReadFileFirstLine read file first line
func ReadFileFirstLine(path string) (string, error) {
file, err := os.Open(path)
if err != nil {
return "", err
}
defer file.Close()
reader := bufio.NewReader(file)
var part []byte
var prefix bool
buffer := bytes.NewBuffer(make([]byte, 0, 512))
for {
if part, prefix, err = reader.ReadLine(); err != nil {
return "", err
}
if part == nil {
return "", os.ErrInvalid
}
buffer.Write(part)
if !prefix {
return buffer.String(), nil
}
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )