linux中and运算符文件重定向,C Primer Plus 第8章 字符输入/输出和输入确认 8.3 重定向和文件...

本文介绍了Linux命令行中的输入输出重定向,包括使用`<`进行输入重定向,使程序从指定文件读取数据,以及使用`>`进行输出重定向,将程序输出保存到文件。通过重定向,可以灵活地控制程序的数据来源和目的地,如制作文件副本或统计文本文件的字符、单词和行数。此外,还提到了组合重定向及注意事项,如避免重定向导致的输入输出冲突。
摘要由CSDN通过智能技术生成

输入和输出涉及到函数、数据和设备。例如,考虑echo_eof.c程序。该程序使用了输入函数getchar()、输入设备(咱们已经假设)是键盘,输入数据流由单独的字符组成。假设您但愿保持相同的输入函数和相同的类型的数据,但但愿改变程序寻找数据的位置。“程序如何了解在哪里寻找其输入?”linux

默认状况下,使用标准I/O包的C程序将标准输入做为其输入源。这就是前面标识为stdin的流。该流是做为向计算机中读取数据的常规方式而创建的。一台现代的计算机是一个灵活的工具,您可能指示它到其余地方寻求输入。特别地,您能够告诉一个程序从文件而不是键盘寻求其输入。shell

令程序与文件一同工做有两种方式。一种方式是明确的使用打开文件、关闭文件、读文件、写文件等专门的函数。这种方法咱们在第13章中讨论。第二种方式是使用一个设计用于与键盘和屏幕共同工做的程序,可是使用不一样通道重定向(redirect)输入和输出,例如输入到文件和从文件中输出。换句话说,就是您将stdin流从新分配至文件。getchar()程序继续从该流中取数据,而不真正关心流是从何处获取其数据。这种方法比第一种方法在一此方面功能更有限,但它更容易使用,并且使您可以更加熟悉经常使用的文件处理技术。函数

重定向的一个主要问题是其与操做系统而不是C相关联。工具

Unix、Linux和Dos重定向学习

1、输入重定向spa

假设您已经编译了echo_eof.c程序,并将它的可执行版本放在一个名为echo_eof的文件中(或在Dos系统上为echo_eof.exe)。要运行该程序,请键入该 可执行文件的名字:操作系统

echo_eof命令行

如今假设您但愿对一个名为words的文本文件使用该程序。文本文件是包含文本的文件,即在该 文件中的数据是以人类可读的字符形式存储。由于该程序处理的是字符,因此它应该与文本文件一同使用。全部您须要作的就是输入命令时使用下列命令代替前面的命令:设计

echo_eof < wordsunix

2、输出重定向

如今假设您但愿echo_eof将您的键盘输入发送给一个名为mywords的文件。那么您能够输入下列的命令并开始键入 :

echo_eof > mywords

>是另外一个重定向运算符。该 运算符会致使创建一个名为mywords的新文件供您使用,而后将echo_eof的输出(也就是说,您键入的字符的副本)重定向到该文件。该重定向将stdout从显示设备(您的屏幕)重定向到mywords文件。您键入字母时在你的屏幕上出现的就是这些字母,而且它们的副本将保存到文件中。要结束程序,请在一行的开始键入ctrl+D(Unix中)或ctrl+Z(Dos中)。

3、组合重定向

如今假设您但愿制做文件mywords的一个副本,并将其命名为savewords。只需发出下列命令:

echo_eof < mywords >savewords

下面这个命令一样能够实现这一功能,由于重定向运算符的顺序可有可无:

echo_eof >savewords

注意不要对同一命令的输入和输出使用相同的文件名。

echo < mywords > mywords  --WRONG

缘由是>mywords使原始的mywords文件在用于输入以前升序被截短为零。

简单的说,下面是在unix linux dos 下使用两个重定向运算符< 和 >所遵循的规则:

一、重定向运算符将一个可执行的程序与个数据文件链接起来。该运算符不能用于一个数据文件与另外一个数据文件的链接,也不能用于一个程序与另外一个程序的链接。

二、使用这些运算符时,输入不能来自一个以上的文件,输出也不能定向至一个以上的文件。

三、除了偶尔在使用到一些对unix shell \ lunux shell 或dos具备特殊 意义的字符 时,名字和操做符之间的空格并非必需的。

4、注释

重定向使您可以把键盘输入程序用于文件。

第7章中介绍了一个统计字数的程序,该程序统计到第一个'|'字符 为止的单词数。将ch从char类型变为int类型,并在循环判断中使用EOF替代'|',这样您就可使用该 程序统计文本文件中的单词数了。

//word.c --统计字符、单词和行

#include

#include

#include

int main(void)

{

int c ; //读入字符 c由char改变成int类型

char prev; //前一个字符

long n_chars=0L; //字符数

int n_lines=0; //行数

int n_words=0; //单词数

int p_lines=0; //不完整的行数

bool inword=false; //若是c在一个单词中,则inword等于true

printf("Enter text to be analyzed(| to terminate): \n");

prev='\n'; //用于识别完整的行

while((c=getchar())!=EOF)

{

n_chars++; //统计字符

if(c=='\n')

n_lines++; //统计行数

if(!isspace(c)&&!inword)

{

inword=true; //开始一个新单词

n_words++; //统计单词

}

if(isspace(c)&&inword)

inword=false; //到达单词尾部

prev=c; //保存字字符值

}

if(prev!='\n')

p_lines=1;

printf("characters=%ld,words=%d,lines=%d,",n_chars,n_words,n_lines);

printf("partial lines = %d\n",p_lines);

return 0;

}

重定向是一个命令行概念,由于您要经过在命令行键入特殊符号来指示它。

若是重定向不能正常工做,您能够尝试让程序直接打开文件。程序清单8.3显示了一个带有简单注释的一个例子。详细内容您将在第13章中学习到。

程序清单8.3  file_eof.c程序

//file_eof.c --打开 一个文件并显示其内容

#include

#include //为了使用exit()

int main (void)

{

int ch ;

FILE * fp;

char fname[50]; //用于存储文件名

printf("Enter the name of the file :");

scanf("%s",fname);

fp=fopen (fname,"r"); //打开文件以供读取

if (fp==Null) //尝试打开文件失败

{

printf("Failed to open file.Bye \n");

exit(1); //终止程序

}

//getc (fp)从打开的文件中获取一个字符

while ((ch=getc(fp)!=EOF))

putchar(ch);

fclose(fp) //关闭文件

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值