📄 vshdumpfile.c
字号:
// // Visopsys// Copyright (C) 1998-2007 J. Andrew McLaughlin// // This library is free software; you can redistribute it and/or modify it// under the terms of the GNU Lesser General Public License as published by// the Free Software Foundation; either version 2.1 of the License, or (at// your option) any later version.//// This library 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 Lesser// General Public License for more details.//// You should have received a copy of the GNU Lesser General Public License// along with this library; if not, write to the Free Software Foundation,// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//// vshDumpFile.c//// This contains some useful functions written for the shell#include <stdlib.h>#include <errno.h>#include <sys/api.h>#include <sys/vsh.h>_X_ int vshDumpFile(const char *fileName){ // Desc: Print the contents of the file, specified by 'fileName', to standard output. 'fileName' must be an absolute pathname, beginning with '/'. int status = 0; unsigned count; file theFile; char *fileBuffer = NULL; // Make sure file name isn't NULL if (fileName == NULL) return (errno = ERR_NULLPARAMETER); for (count = 0; count < sizeof(file); count ++) ((char *) &theFile)[count] = NULL; // Call the "find file" routine to see if we can get the first file status = fileFind(fileName, &theFile); if (status < 0) return (errno = status); // Make sure the file isn't empty. We don't want to try reading // data from a nonexistent place on the disk. if (theFile.size == 0) // It is empty, so just return return (status = 0); // The file exists and is non-empty. That's all we care about (we don't // care at this point, for example, whether it's a file or a directory. // Read it into memory and print it on the screen. // Allocate a buffer to store the file contents in fileBuffer = malloc((theFile.blocks * theFile.blockSize) + 1); if (fileBuffer == NULL) return (errno = ERR_MEMORY); status = fileOpen(fileName, OPENMODE_READ, &theFile); if (status < 0) { free(fileBuffer); return (errno = status); } status = fileRead(&theFile, 0, theFile.blocks, fileBuffer); if (status < 0) { free(fileBuffer); return (errno = status); } // Print the file for (count = 0; count < theFile.size; count ++) { // Look out for tab characters if (fileBuffer[count] == (char) 9) textTab(); // Look out for newline characters else if (fileBuffer[count] == (char) 10) textNewline(); else textPutc(fileBuffer[count]); } // If the file did not end with a newline character... if (fileBuffer[count - 1] != '\n') textNewline(); // Free the memory free(fileBuffer); return (status = 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -