Files
llgo/_demo/c/fcntl/fcntl.go

77 lines
1.6 KiB
Go
Raw Normal View History

2024-07-12 16:58:52 +08:00
package main
import (
"unsafe"
2025-04-03 15:52:18 +08:00
"github.com/goplus/lib/c"
"github.com/goplus/lib/c/os"
2024-07-12 16:58:52 +08:00
)
func main() {
filename := c.Str("testfile.txt")
2024-07-15 10:19:55 +08:00
data := c.Str("Hello, os!")
2024-07-12 16:58:52 +08:00
var buffer [20]c.Char
// Open a file, O_CREAT|O_WRONLY|O_TRUNC means create, write only, or clear the file
2024-07-15 10:19:55 +08:00
fd := os.Open(filename, os.O_CREAT|os.O_WRONLY|os.O_TRUNC, 0644)
2024-07-12 16:58:52 +08:00
if fd == -1 {
c.Printf(c.Str("open error\n"))
return
}
// Writing data to a file
bytesWritten := os.Write(fd, c.Pointer(data), c.Strlen(data))
if bytesWritten == -1 {
c.Printf(c.Str("write error\n"))
os.Close(fd)
return
}
c.Printf(c.Str("Written %ld bytes to %s\n"), bytesWritten, filename)
// Get file status flags
2024-07-15 10:19:55 +08:00
flags := os.Fcntl(fd, os.F_GETFL)
2024-07-12 16:58:52 +08:00
if flags == -1 {
2024-07-15 10:19:55 +08:00
c.Printf(c.Str("os error\n"))
2024-07-12 16:58:52 +08:00
os.Close(fd)
return
}
c.Printf(c.Str("File flags: %d\n"), flags)
// Set the file status flag to non-blocking mode
2024-07-15 10:19:55 +08:00
if os.Fcntl(fd, os.F_SETFL, flags|os.O_NONBLOCK) == -1 {
c.Printf(c.Str("os error\n"))
2024-07-12 16:58:52 +08:00
os.Close(fd)
return
}
c.Printf(c.Str("set file status successfully\n"))
c.Printf(c.Str("111"))
// Close file
os.Close(fd)
// Reopen the file, O_RDONLY means read-only
2024-07-15 10:19:55 +08:00
fd = os.Open(filename, os.O_RDONLY)
2024-07-12 16:58:52 +08:00
if fd == -1 {
c.Printf(c.Str("open error\n"))
return
}
// Reading data from a file
// &buffer[:][0]
// unsafe.SliceData(buffer[:])
bytesRead := os.Read(fd, c.Pointer(unsafe.SliceData(buffer[:])), unsafe.Sizeof(buffer)-1)
if bytesRead == -1 {
c.Printf(c.Str("read error\n"))
os.Close(fd)
return
}
// Ensure that the buffer is null-terminated
buffer[bytesRead] = c.Char(0)
c.Printf(c.Str("Read %ld bytes: %s\n"), bytesRead, &buffer[0])
2024-07-12 16:58:52 +08:00
// Close file
os.Close(fd)
}