⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catf.c

📁 操作系统源代码
💻 C
字号:
/* * Copy the files given as arguments to the standard output.  The file * name "-" refers to the standard input. * * Copyright (C) 1989 by Kenneth Almquist.  All rights reserved. * This file is part of ash, which is distributed under the terms specified * by the Ash General Public License.  See the file named LICENSE. */#define main catfcmd#include "bltin.h"#include "../error.h"#include <sys/param.h>#include <fcntl.h>#ifdef SBUFSIZE#define BUFSIZE() SBUFSIZE#else#ifdef MAXBSIZE#define BUFSIZE() MAXBSIZE#else#define BUFSIZE() BSIZE#endif#endifmain(argc, argv)  char **argv; {      char *filename;      char *buf = stalloc(BUFSIZE());      int fd;      int i;#ifdef SHELL      volatile int input;      struct jmploc jmploc;      struct jmploc *volatile savehandler;#endif      INITARGS(argv);#ifdef SHELL      input = -1;      if (setjmp(jmploc.loc)) {	    close(input);	    handler = savehandler;	    longjmp(handler, 1);      }      savehandler = handler;      handler = &jmploc;#endif      while ((filename = *++argv) != NULL) {	    if (filename[0] == '-' && filename[1] == '\0') {		  fd = 0;	    } else {#ifdef SHELL		  INTOFF;		  if ((fd = open(filename, O_RDONLY)) < 0)			error("Can't open %s", filename);		  input = fd;		  INTON;#else		  if ((fd = open(filename, O_RDONLY)) < 0) {			fprintf(stderr, "catf: Can't open %s\n", filename);			exit(2);		  }#endif	    }	    while ((i = read(fd, buf, BUFSIZE())) > 0) {#ifdef SHELL		  if (out1 == &memout) {			register char *p;			for (p = buf ; --i >= 0 ; p++) {			      outc(*p, &memout);			}		  } else {			write(1, buf, i);		  }#else		  write(1, buf, i);#endif	    }	    if (fd != 0)		  close(fd);      }#ifdef SHELL      handler = savehandler;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -