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

📄 lp.c

📁 操作系统源代码
💻 C
字号:
/*	lp 1.4 - Send file to the lineprinter		Author: Kees J. Bot *								3 Dec 1989 */#define nil 0#include <sys/types.h>#include <stdio.h>#include <limits.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <string.h>#include <errno.h>#include <sys/wait.h>char LPD1[] = "/usr/sbin/lpd";		/* Proper place of lpd */char LPD2[] = "/usr/bin/lpd";		/* Minix has no sbin directories. */void report(char *mess){	fprintf(stderr, "lp: %s: %s\n", mess, strerror(errno));}void fatal(char *mess){	report(mess);	exit(1);}void lp(char *file)/* Start the lpd daemon giving it the file to spool and print. */{	int pid, status;	if (file[0] != '/' || (pid= fork()) == 0) {		execl(LPD1, LPD1, file, (char *) nil);		if (errno != ENOENT) fatal(LPD1);		execl(LPD2, LPD2, file, (char *) nil);		fatal(LPD2);	}	if (pid < 0) fatal("can't fork");	if (waitpid(pid, &status, 0) < 0) fatal("wait");	if (status != 0) exit(1);}char path[PATH_MAX+1];int cwdsize;int main(int argc, char **argp){	int e=0;	char *file;	if (argc <= 1) lp("stdin");	/* Lpd requires full path names, so find out where we are. */	if (getcwd(path, sizeof(path)) == nil)		fatal("Can't determine current directory");	cwdsize= strlen(path);	/* Hand each file to lpd. */	while ((file= *++argp) != nil) {		close(0);		if (open(file, O_RDONLY) != 0) {			report(file);			e=1;			continue;		}		if (file[0] == '/') {			lp(file);			continue;		}		if (cwdsize + 1 + strlen(file) + 1 > sizeof(path)) {			fprintf(stderr,				"lp: full pathname of %s is too long\n",				file);			e=1;			continue;		}		path[cwdsize] = '/';		strcpy(path + cwdsize + 1, file);		lp(path);	}	exit(e);}

⌨️ 快捷键说明

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