Skip to main content

Files in C


Devices represented as files
If file can be physical device, not fixed in size or behavior

Streams are associated with files
May support file position indicator [0,length]
Binary or not
Can be closed, opened, flushed
Can be buffered, unbuffered, line buffered
Unbuffered - i/o immediate
Fully buffered - i/o accumulated into block, then passed
Line buffered - block size depends on \n

Each file opened has a file descriptor (fd)
fd describes state of file
Opened, closed, position etc

FILE --- a struct defined in stdio.h
-fopen (const char* path, const char* mode);
-fscanf(stdin,....) == scanf
-fprintf(stdout,....) == printf
-feof(stream), does not happen until beyond stream

When program begins, special files
-stdin, stdout, stderr are opened
If file position supported, position == 0
Print, scan adjusts position in stream
Get position == ftell, change position == fseek

Setvbuf defines how a stream should be buffered
int setvbuf (FILE* stream, char* buffer, int mode, size_t size)
- _IOFBF -- full
- _IOLBF -- line
- _IONBF -- no buffering
Buffer size in bytes


Popular posts from this blog

Understanding database [9] : Choosing indexes

Understanding database 9 : Choosing indexes When choosing indexes, we choose the best plan that suits for the queries, and look for additional indexes that may potentially upgrade upon that. Before creating, we must also consider the impact on updates in the workload, such that indexes take disk space. For a query, the WHERE clause are the main focus point to make indexes on, where exact matches suggest a hash index and range queries suggest a tree index. Clustering is extremely helpful when it comes to range queries, and may also help with equality queries if there are duplicates. Search keys with multiple attribute should be considered if a WHERE clause contains multiple conditions, and the order of attributes is important for range queries. Searching may become ‘index-only’ with such indexes.

Understanding database [6] : Clustered Index

A clustered index is what is good for a range search over a range of search key values, and the index entries and the rows are ordered the same way, which is different from unclustered indexes (secondary indexes). To use a clustered index, we use the index to locate the first index entry at the start of the range, which where the first row is located at. If the index is clustered, subsequent rows will be stored in successive locations with the ordering , therefore it may minimize the page transfers and maximizes cache hits. For one table, there may only be one clustered index, whereas there can be as many unclustered indexes as you may want  to create. Unclustered indexes aren ’ t as good as clustered, but they might become necessary when it comes to finding for other attributes apart from the primary key. Smaller topics : Dense index & Sparse index When we say sparse index, we mean that there is an index entry for each page of the data file. With this structuring