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

📄 cat.c

📁 操作系统源代码
💻 C
字号:
/* cat - concatenates files  		Author: Andy Tanenbaum *//* 30 March 90 - Slightly modified for efficiency by Norbert Schlenker. */#include <errno.h>#include <sys/types.h>#include <fcntl.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <minix/minlib.h>#include <stdio.h>#define CHUNK_SIZE	4096static int unbuffered;static char ibuf[CHUNK_SIZE];static char obuf[CHUNK_SIZE];static char *op = obuf;_PROTOTYPE(int main, (int argc, char **argv));_PROTOTYPE(void copyfile, (int ifd, int ofd));_PROTOTYPE(void flush, (void));_PROTOTYPE(void fatal, (void));int excode = 0;int main(argc, argv)int argc;char *argv[];{  int i, fd;  i = 1;  /* Check for the -u flag -- unbuffered operation. */  if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'u' && argv[1][2] == 0) {	unbuffered = 1;	i = 2;  }  if (i >= argc) {	copyfile(STDIN_FILENO, STDOUT_FILENO);  } else {	for ( ; i < argc; i++) {		if (argv[i][0] == '-' && argv[i][1] == 0) {			copyfile(STDIN_FILENO, STDOUT_FILENO);		} else {			fd = open(argv[i], O_RDONLY);			if (fd < 0) {				std_err("cat: cannot open ");				std_err(argv[i]);				std_err(": ");				std_err(strerror (errno));				std_err("\n");				excode = 1;			} else {				copyfile(fd, STDOUT_FILENO);				close(fd);			}		}	}  }  flush();  return(excode);}void copyfile(ifd, ofd)int ifd, ofd;{  int n;  while (1) {	n = read(ifd, ibuf, CHUNK_SIZE);	if (n < 0) fatal();	if (n == 0) return;	if (unbuffered || (op == obuf && n == CHUNK_SIZE)) {		if (write(ofd, ibuf, n) != n) fatal();	} else {		int bytes_left;		bytes_left = &obuf[CHUNK_SIZE] - op;		if (n <= bytes_left) {			memcpy(op, ibuf, (size_t)n);			op += n;		} else {			memcpy(op, ibuf, (size_t)bytes_left);			if (write(ofd, obuf, CHUNK_SIZE) != CHUNK_SIZE)				fatal();			n -= bytes_left;			memcpy(obuf, ibuf + bytes_left, (size_t)n);			op = obuf + n;		}	}  }}void flush(){  if (op != obuf)	if (write(STDOUT_FILENO, obuf, (size_t) (op - obuf)) <= 0) fatal();}void fatal(){  perror("cat");  exit(1);}

⌨️ 快捷键说明

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