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

📄 put.c

📁 unix高级编程源代码.<<unix高级编程>>
💻 C
字号:
#include	"call.h"

/* Copy a file from local to remote. */

void
put(int remfd)
{
	int		i, n, linecnt;
	char	c, cmd[MAXLINE];
	FILE	*fpin;

	if (prompt_read("~[put] ", take_put_args) < 0) {
		printf("usage: [put] <sourcefile> <destfile>\n\r");
		return;
	}

			/* open local input file */
	if ( (fpin = fopen(src, "r")) == NULL) {
		err_ret("can't open %s for reading", src);
		putc('\r', stderr);
		fflush(stderr);
		return;
	}

			/* send stty/cat/stty command to remote host */
	sprintf(cmd, "stty -echo; cat >%s; stty echo\r", dst);
	n = strlen(cmd);
	if (write(remfd, cmd, n) != n)
		err_sys("write error");
	tcdrain(remfd);		/* wait for our output to be sent */
	sleep(4);			/* and let stty take effect */

			/* send file to remote host */
	linecnt = 0;
	for ( ; ; ) {
		if ( (i = getc(fpin)) == EOF)
			break;			/* all done */
		c = i;
		if (write(remfd, &c, 1) != 1)
			break;			/* line has probably dropped */
		if (c == '\n')		/* but newlines are written to file */
			printf("\r%d", ++linecnt);
	}

			/* send EOF to remote, to terminate cat */
	c = tty_termios()->c_cc[VEOF];
	write(remfd, &c, 1);
	tcdrain(remfd);				/* wait for our output to be sent */
	sleep(2);
	tcflush(remfd, TCIOFLUSH);	/* flush echo of stty/cat/stty */
	c = '\n';
	write(remfd, &c, 1);

	if (ferror(fpin)) {
		err_msg("read error of local file");
		putc('\r', stderr);
		fflush(stderr);
	}
	fclose(fpin);
}

⌨️ 快捷键说明

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