12#ifndef CMSIS_PLUS_POSIX_IO_FILE_H_
13#define CMSIS_PLUS_POSIX_IO_FILE_H_
17#if defined(__cplusplus)
21#if defined(OS_USE_OS_APP_CONFIG_H)
22#include <cmsis-plus/os-app-config.h>
34#pragma GCC diagnostic push
36#pragma clang diagnostic ignored "-Wc++98-compat"
57#pragma GCC diagnostic push
59#elif defined(__GNUC__)
60#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
61#pragma GCC diagnostic ignored "-Wsuggest-final-types"
95 operator= (
const file&)
105 virtual ~file ()
override;
119 close (
void)
override;
133#pragma GCC diagnostic push
134#if defined(__clang__)
135#elif defined(__GNUC__)
136#pragma GCC diagnostic ignored "-Wredundant-tags"
142#pragma GCC diagnostic pop
165#pragma GCC diagnostic pop
236#pragma GCC diagnostic push
237#if defined(__clang__)
238#elif defined(__GNUC__)
239#pragma GCC diagnostic ignored "-Wredundant-tags"
245#pragma GCC diagnostic pop
266#pragma GCC diagnostic push
267#if defined(__clang__)
268#elif defined(__GNUC__)
269#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
270#pragma GCC diagnostic ignored "-Wsuggest-final-types"
272 template <
typename T>
342#pragma GCC diagnostic pop
346#pragma GCC diagnostic push
347#if defined(__clang__)
348#elif defined(__GNUC__)
349#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
350#pragma GCC diagnostic ignored "-Wsuggest-final-types"
351#pragma GCC diagnostic ignored "-Wpadded"
353 template <
typename T,
typename L>
404 close (
void)
override;
407 read (
void* buf, std::size_t nbyte)
override;
410 write (
const void* buf, std::size_t nbyte)
override;
416 vfcntl (
int cmd, std::va_list args)
override;
418#pragma GCC diagnostic push
419#if defined(__clang__)
420#elif defined(__GNUC__)
421#pragma GCC diagnostic ignored "-Wredundant-tags"
425#pragma GCC diagnostic pop
428 lseek (off_t offset,
int whence)
override;
434 fsync (
void)
override;
463#pragma GCC diagnostic pop
499 template <
typename T>
501 :
file{ impl_instance_ },
504#if defined(OS_TRACE_POSIX_IO_FILE)
505 trace::printf (
"file_implementable::%s()=@%p\n", __func__,
this);
509#pragma GCC diagnostic push
510#if defined(__clang__)
511#elif defined(__GNUC__)
512#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
514 template <
typename T>
517#if defined(OS_TRACE_POSIX_IO_FILE)
518 trace::printf (
"file_implementable::%s() @%p\n", __func__,
this);
521#pragma GCC diagnostic pop
523 template <
typename T>
532 template <
typename T,
typename L>
535 :
file{ impl_instance_ },
536 impl_instance_{ fs },
539#if defined(OS_TRACE_POSIX_IO_FILE)
544#pragma GCC diagnostic push
545#if defined(__clang__)
546#elif defined(__GNUC__)
547#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
549 template <
typename T,
typename L>
552#if defined(OS_TRACE_POSIX_IO_FILE)
556#pragma GCC diagnostic pop
560 template <
typename T,
typename L>
564 std::lock_guard<L> lock{ locker_ };
569 template <
typename T,
typename L>
573 std::lock_guard<L> lock{ locker_ };
578 template <
typename T,
typename L>
582 std::lock_guard<L> lock{ locker_ };
587 template <
typename T,
typename L>
591 std::lock_guard<L> lock{ locker_ };
596 template <
typename T,
typename L>
600 std::lock_guard<L> lock{ locker_ };
605#pragma GCC diagnostic push
606#if defined(__clang__)
607#elif defined(__GNUC__)
608#pragma GCC diagnostic ignored "-Wredundant-tags"
610 template <
typename T,
typename L>
614 std::lock_guard<L> lock{ locker_ };
618#pragma GCC diagnostic pop
620 template <
typename T,
typename L>
624 std::lock_guard<L> lock{ locker_ };
629 template <
typename T,
typename L>
633 std::lock_guard<L> lock{ locker_ };
638 template <
typename T,
typename L>
642 std::lock_guard<L> lock{ locker_ };
647 template <
typename T,
typename L>
658#pragma GCC diagnostic pop
virtual ~file_impl() override
virtual int do_ftruncate(off_t length)=0
class file_system & get_file_system(void)
virtual int do_fsync(void)=0
file_implementable(file_system &fs)
virtual ~file_implementable() override
value_type & impl(void) const
virtual ssize_t read(void *buf, std::size_t nbyte) override
virtual ssize_t writev(const iovec *iov, int iovcnt) override
file_lockable(file_system &fs, lockable_type &locker)
virtual ~file_lockable() override
virtual off_t lseek(off_t offset, int whence) override
virtual int fstat(struct stat *buf) override
value_type & impl(void) const
virtual ssize_t write(const void *buf, std::size_t nbyte) override
virtual int vfcntl(int cmd, std::va_list args) override
virtual int close(void) override
virtual int ftruncate(off_t length) override
virtual int fsync(void) override
file_impl & impl(void) const
virtual int fstatvfs(struct statvfs *buf)
virtual int ftruncate(off_t length)
class file_system & get_file_system(void)
virtual int close(void) override
virtual ssize_t writev(const iovec *iov, int iovcnt)
virtual off_t lseek(off_t offset, int whence)
virtual int fstat(struct stat *buf)
virtual ssize_t write(const void *buf, std::size_t nbyte)
virtual ssize_t read(void *buf, std::size_t nbyte)
virtual int vfcntl(int cmd, std::va_list args)
The core of a double linked list, pointers to next, previous.
int printf(const char *format,...)
Write a formatted string to the trace device.
int stat(const char *path, struct stat *buf)