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

📄 cat.c

📁 UNIX下SH的实现源码
💻 C
字号:
/* * cat replacement * * no options - the way cat was intended */#include <fcntl.h>#include <errno.h>#include "builtins.h"#include "shell.h"#ifndef errnoextern int errno;#endifextern char *strerror ();extern char **make_builtin_argv ();static intfcopy(fd)int	fd;{	char	buf[1024], *s;	int	n, w, e;	while (n = read(fd, buf, sizeof (buf))) {		w = write(1, buf, n);		if (w != n) {			e = errno;			write(2, "cat: write error: ", 18);			s = strerror(e);			write(2, s, strlen(s));			write(2, "\n", 1);			return 1;		}	}	return 0;}cat_main (argc, argv)int	argc;char	**argv;{	int	i, fd, r;	char	*s;	if (argc == 1)		return (fcopy(0));	for (i = r = 1; i < argc; i++) {		if (argv[i][0] == '-' && argv[i][1] == '\0')			fd = 0;		else {			fd = open(argv[i], O_RDONLY, 0666);			if (fd < 0) {				s = strerror(errno);				write(2, "cat: cannot open ", 17);				write(2, argv[i], strlen(argv[i]));				write(2, ": ", 2);				write(2, s, strlen(s));				write(2, "\n", 1);				continue;			}		}		r = fcopy(fd);		if (fd != 0)			close(fd);	}	return (r);}cat_builtin(list)WORD_LIST *list;{	char	**v;	int	c, r;	v = make_builtin_argv(list, &c);	r = cat_main(c, v);	free(v);	return r;}char *cat_doc[] = {	"Read each FILE and display it on the standard output.   If any",	"FILE is `-' or if no FILE argument is given, the standard input",	"is read.",	(char *)0};struct builtin cat_struct = {	"cat",	cat_builtin,	BUILTIN_ENABLED,	cat_doc,	"cat [-] [file ...]",	0};

⌨️ 快捷键说明

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