📄 fileio.c
字号:
//=================================================================//// fileio.c//// Testcase for C library file I/O functions////=================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 2003 Gary Thomas//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//=================================================================//#####DESCRIPTIONBEGIN####//// Author(s): Gary Thomas// Contributors: // Date: 2003-03-06// Description: Contains testcode for C library file I/O functions//////####DESCRIPTIONEND####// CONFIGURATION#include <pkgconf/libc_stdio.h> // Configuration header// INCLUDES#include <stdio.h> // All the stdio functions#include <errno.h> // errno#include <cyg/infra/testcase.h> // Testcase API#include <unistd.h>#include <cyg/fileio/fileio.h>#define NUM_TEST_LINES 100#define TEST_DIR "/"#define TEST_FILE "test.file"static char errmsg[256];// FUNCTIONSstatic voidtest( CYG_ADDRWORD data ){ int err, i, lines, len, total_len, expected_len; FILE *fp; char buf[512], *cp; err = mount("", TEST_DIR, "ramfs"); if (err < 0) { CYG_TEST_FAIL_FINISH("Can't mount '/' file system"); } err = chdir(TEST_DIR); if (err < 0) { CYG_TEST_FAIL_FINISH("Can't chdir('/')"); } fp = fopen(TEST_FILE, "w"); if (fp == (FILE *)NULL) { CYG_TEST_FAIL_FINISH("Can't create test file"); } for (i = 0; i < NUM_TEST_LINES; i++) { len = fprintf(fp, "This is line: %4d\n", i+1); if (len != 19) { sprintf(errmsg, "Error writing data - line: %d, len: %d\n", i+1, len); CYG_TEST_FAIL_FINISH(errmsg); } } err = fclose(fp); if (err) { CYG_TEST_FAIL_FINISH("Error closingfile"); } fp = fopen(TEST_FILE, "r"); if (fp == (FILE *)NULL) { CYG_TEST_FAIL_FINISH("Can't open test file"); } lines = 0; total_len = 0; while ((cp = fgets(buf, sizeof(buf), fp)) != NULL) { lines++; total_len += strlen(buf); } sprintf(errmsg, "Read %d lines, %d bytes", lines, total_len); CYG_TEST_INFO(errmsg); expected_len = total_len; if (lines != NUM_TEST_LINES) { sprintf(errmsg, "Read %d lines, not %d", lines, NUM_TEST_LINES); CYG_TEST_FAIL_FINISH(errmsg); } if (ferror(fp)) { CYG_TEST_FAIL_FINISH("ferror() set"); } if (!feof(fp)) { CYG_TEST_FAIL_FINISH("feof() not set"); } err = fclose(fp); if (err) { CYG_TEST_FAIL_FINISH("Error closingfile"); } fp = fopen(TEST_FILE, "r"); if (fp == (FILE *)NULL) { CYG_TEST_FAIL_FINISH("Can't open test file"); } // This tests whether or not it is possible to detect EOF separate // from an error and recover from it. The buffer size is [probably] // such that fread() will not be able to read the entire file in // 512 byte chunks. lines = 0; total_len = 0; while ((len = fread(buf, sizeof(buf), 1, fp)) == 1) { lines++; total_len += sizeof(buf); } sprintf(errmsg, "Read %d chunks, %d bytes, err: %d, eof: %d", lines, total_len, ferror(fp), feof(fp)); CYG_TEST_INFO(errmsg); if (ferror(fp)) { CYG_TEST_FAIL_FINISH("ferror() set"); } if (!feof(fp)) { CYG_TEST_FAIL_FINISH("feof() not set"); } if (expected_len != total_len) { if (total_len > expected_len) { CYG_TEST_FAIL_FINISH("Too many characters read"); } // There should still be more characters left to read, // but less than sizeof(buf) clearerr(fp); rewind(fp); fseek(fp, total_len, SEEK_SET); len = fread(buf, 1, sizeof(buf), fp); if (len != (expected_len - total_len)) { sprintf(errmsg, "Wrong number of residual bytes - read %d, should be %d", len, expected_len-total_len); CYG_TEST_FAIL_FINISH(errmsg); } } err = fclose(fp); if (err) { CYG_TEST_FAIL_FINISH("Error closingfile"); } CYG_TEST_PASS("Stdio file I/O tests completed"); CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library stdio file I/O functions");} // test()intmain(int argc, char *argv[]){ CYG_TEST_INIT(); CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " "library stdio file I/O functions"); test(0); return 0;} // main()// EOF fileio.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -