126 lines
5.1 KiB
Markdown
126 lines
5.1 KiB
Markdown
[fs.conformance]
|
||
|
||
# 31 Input/output library [[input.output]](./#input.output)
|
||
|
||
## 31.12 File systems [[filesystems]](filesystems#fs.conformance)
|
||
|
||
### 31.12.2 Conformance [fs.conformance]
|
||
|
||
#### [31.12.2.1](#general) General [[fs.conformance.general]](fs.conformance.general)
|
||
|
||
[1](#general-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13168)
|
||
|
||
Conformance is specified in terms of behavior[.](#general-1.sentence-1)
|
||
|
||
Ideal behavior is not always
|
||
implementable, so the conformance subclauses take that into account[.](#general-1.sentence-2)
|
||
|
||
#### [31.12.2.2](#fs.conform.9945) POSIX conformance [[fs.conform.9945]](fs.conform.9945)
|
||
|
||
[1](#fs.conform.9945-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13173)
|
||
|
||
Some behavior is specified by reference to POSIX[.](#fs.conform.9945-1.sentence-1)
|
||
|
||
How such behavior is actually implemented is unspecified[.](#fs.conform.9945-1.sentence-2)
|
||
|
||
[*Note [1](#fs.conform.9945-note-1)*:
|
||
|
||
This constitutes an âas ifâ rule allowing implementations
|
||
to call native
|
||
operating system or other APIs[.](#fs.conform.9945-1.sentence-3)
|
||
|
||
â *end note*]
|
||
|
||
[2](#fs.conform.9945-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13181)
|
||
|
||
Implementations should provide such behavior as it is defined by
|
||
POSIX[.](#fs.conform.9945-2.sentence-1)
|
||
|
||
Implementations shall document any behavior that differs from the
|
||
behavior defined by POSIX[.](#fs.conform.9945-2.sentence-2)
|
||
|
||
Implementations that do not support exact POSIX
|
||
behavior should provide behavior as close to POSIX behavior as is reasonable given the
|
||
limitations of actual operating systems and file systems[.](#fs.conform.9945-2.sentence-3)
|
||
|
||
If an implementation cannot provide any
|
||
reasonable behavior, the implementation shall report an error as specified in [[fs.err.report]](fs.err.report "31.12.5 Error reporting")[.](#fs.conform.9945-2.sentence-4)
|
||
|
||
[*Note [2](#fs.conform.9945-note-2)*:
|
||
|
||
This allows users to rely on an exception being thrown or
|
||
an error code being set when an implementation cannot provide any reasonable
|
||
behavior[.](#fs.conform.9945-2.sentence-5)
|
||
|
||
â *end note*]
|
||
|
||
[3](#fs.conform.9945-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13194)
|
||
|
||
Implementations are not required to provide behavior that is not supported by
|
||
a particular file system[.](#fs.conform.9945-3.sentence-1)
|
||
|
||
[*Example [1](#fs.conform.9945-example-1)*:
|
||
|
||
The FAT file system used by some memory cards, camera memory, and
|
||
floppy disks does not support hard links, symlinks, and many other features of
|
||
more capable file systems, so implementations are not required to support those
|
||
features on the FAT file system
|
||
but instead are required to report an error as described above[.](#fs.conform.9945-3.sentence-2)
|
||
|
||
â *end example*]
|
||
|
||
#### [31.12.2.3](#fs.conform.os) Operating system dependent behavior conformance [[fs.conform.os]](fs.conform.os)
|
||
|
||
[1](#fs.conform.os-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13206)
|
||
|
||
Behavior that is specified as being[*operating system dependent*](#def:operating_system_dependent "31.12.2.3 Operating system dependent behavior conformance [fs.conform.os]") is dependent upon the behavior
|
||
and characteristics of an operating system[.](#fs.conform.os-1.sentence-1)
|
||
|
||
The operating system an
|
||
implementation is dependent upon isimplementation-defined[.](#fs.conform.os-1.sentence-2)
|
||
|
||
[2](#fs.conform.os-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13215)
|
||
|
||
It is permissible for an implementation to be dependent upon an operating
|
||
system emulator rather than the actual underlying operating system[.](#fs.conform.os-2.sentence-1)
|
||
|
||
#### [31.12.2.4](#fs.race.behavior) File system race behavior [[fs.race.behavior]](fs.race.behavior)
|
||
|
||
[1](#fs.race.behavior-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13221)
|
||
|
||
A [*file system race*](#def:file_system_race "31.12.2.4 File system race behavior [fs.race.behavior]") is
|
||
the condition that occurs
|
||
when multiple threads, processes, or computers interleave access and
|
||
modification of
|
||
the same object within a file system[.](#fs.race.behavior-1.sentence-1)
|
||
|
||
Behavior is undefined if calls to functions provided by subclause [[filesystems]](filesystems "31.12 File systems") introduce a file system race[.](#fs.race.behavior-1.sentence-2)
|
||
|
||
[2](#fs.race.behavior-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13229)
|
||
|
||
If the possibility of a file system race would make it unreliable for a
|
||
program to test for a precondition before calling a function described herein,*Preconditions*: is not specified for the function[.](#fs.race.behavior-2.sentence-1)
|
||
|
||
[*Note [1](#fs.race.behavior-note-1)*:
|
||
|
||
As a design practice, preconditions are not specified when it
|
||
is unreasonable for a program to detect them prior to calling the function[.](#fs.race.behavior-2.sentence-2)
|
||
|
||
â *end note*]
|