From 41d86a29051af9e3b5fe7e37bd4c0c0a18993767 Mon Sep 17 00:00:00 2001 From: zlg Date: Sun, 9 Jan 2022 16:46:25 -0800 Subject: Solve exercise 8-3: fflush and fclose --- ch8/8-03_fflush-and-fclose.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ch8/8-03_fflush-and-fclose.c diff --git a/ch8/8-03_fflush-and-fclose.c b/ch8/8-03_fflush-and-fclose.c new file mode 100644 index 0000000..add2318 --- /dev/null +++ b/ch8/8-03_fflush-and-fclose.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include +#include "syscalls.h" +/* The C Programming Language: 2nd Edition + * + * Exercise 8-3: Design and write `_flushbuf`, `fflush`, and `fclose`. + * + * Notes: Not much guidance here, eh? :) We'll want to consult manpages. + * + * _flushbuf returns 0 on success, -1 on failure. + * fflush flushes a buffer, or *all* buffers + * fclose does housekeeping on _iob members so fds can be juggled + * + * Since work done in these exercises is predominantly in a header file, the + * final implementation is used for all exercises that rely on it. Attempts + * have been made to demonstrate *what* is being done, but it's difficult to do + * so without creating side effects inside the buffers themselves. Trust that + * if this file outputs its own source, everything is fine. + */ + +int main() { + /* Let's copy 8-2's exercise but get a different look on the buffer. */ + /* show the contents of buffers before and after flush */ + FILE *fp = fopen("8-03_fflush-and-fclose.c", "r"); + if (fp != NULL) { + char c; + while ((c = getc(fp)) != EOF) { + putchar(c); + } + /* fclose calls fflush */ + fclose(fp); + fclose(stdout); + } else { + puts("Could not open file for reading."); + } + return 0; +} -- cgit v1.2.3-70-g09d2 e='q' value=''/>
AgeCommit message (Collapse)AuthorFilesLines
2025-07-28Update build system, release 0.3beta8v0.3b8zlg1-0/+1
Target Python version is now 3.13, and built with `python -m build`.
2025-07-27README.md: update to include mentions of *_date fieldszlg1-7/+26
2025-07-27Finish integrating support for p_date, et alzlg2-23/+59
* Tightened up update_game() to use explicit fields * 'unowned' and 'unbeatable' status now show as blank fields in list_game() output * Results are counted and a proper message is emitted instead of erroring when there are no results. * Support p_date, b_date, and c_date in the CLI
2025-01-24Add support for p_date, b_date, c_date to CLIzlg2-48/+136
The library and CLI tool both can handle the new schema v2 that includes these columns. Please use the schema migration script in the "scripts" directory to continue using VGStash. The list_games function has been completely re-worked to handle arbitrary tabular data. Raw mode has remained, but the width switch (-w) for default table view is no longer present. The first VIEW supporting these columns is also available in FILTERS: the backlog_age filter, which will show you the amount of time games with a purchase date value have been sitting in your collection unbeaten.
2025-01-24tox.ini: Update to Python 3.11 env by defaultzlg1-1/+1
2025-01-23schema1-to-2.py: Add shebang because I'm a doofuszlg1-0/+2
2023-09-22scripts: Add schema v1->v2 migration scriptzlg2-9/+85
This script adds three columns to the schema, supporting the "Purchased", "Beaten", and "Completed" note headers. They are now converted to a UNIX timestamp and stored in a separate column so queries made against that metadata are easier. The library itself still needs to support all the new columns.