跟我学Linux编程3输入输出.doc

跟我学Linux编程3输入输出.doc

ID:51717128

大小:359.50 KB

页数:7页

时间:2020-03-15

跟我学Linux编程3输入输出.doc_第1页
跟我学Linux编程3输入输出.doc_第2页
跟我学Linux编程3输入输出.doc_第3页
跟我学Linux编程3输入输出.doc_第4页
跟我学Linux编程3输入输出.doc_第5页
资源描述:

《跟我学Linux编程3输入输出.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux编程中的输入输出,如果只从C语言角度来看,可以说也没有什么特殊之处,本章节也并不打算花笔墨来介绍printf,scanf的用法。但如果从Linux系统角度去看,又有不少有意思有东西,如输入输出重定向,管道,彩色字符显示等等,值得玩耍一翻,这才是接下来要我要介绍的重点。Linux程序,运行后,通常会打开三个文件,其编号分别为0,1,2(我们称之为句柄号)。其中0是标准输入,1是标准输出,2为错误输出。我们来看个例子:程序什么也不做,一直sleep循环,以便于我们能够有时间查看它运行时的输入输出文件句柄。执行:gccin

2、out.c-oio1编译完成后,我们执行程序:./io1再开一个新终端,执行:ps-a

3、grepio1会得到如下的信息:26065pts/2500:00:00io1第一个整数是我们程序的进程编号(每次运行均有可能不一样),我们接下来的命令中需要用到它:ls/proc/26065/fd–l会显示这样的信息:lrwx------1dxldxl643月3009:580->/dev/pts/25lrwx------1dxldxl643月3009:581->/dev/pts/25lrwx------1dxldxl643月3009:552

4、->/dev/pts/25显示的正是进程26065当前打开的文件句柄,共有3行,正是我上面所说的3个文件。终端运行过程及结果Linux系统,程序打开的文件通常用一个整数句柄来表式。我们可以调用close()函数来关闭它。语法为:intclose(intfd)其中,fd为文件句柄。程序默认打开的标准输入输出文件句柄,也可以通过close来关闭。我们接下来实验一下关闭0号文件会有什么现像发生:编译并执行:gccinout.c-oio2./io2我们会意外发现,”Hello,world!”并没有在屏幕上输出!我们通过之前所说的方法,

5、来查看io2的文件句柄打开情况:发现,1号文件确实是不存在了。原理也不难理解,printf的作用就是在标准输出(终端屏幕)上显示东西,现在标准输出被关闭了,当然也就什么也显示不出来。同理,如果close(0),你程序中的scanf就得不到输入内容;close(2),通过perror输出的错误信息将不再被显示。除close外,还有read,write一系列针对文件句柄进行操作的函数,如果将其施加在0,1,2这三个文件句柄上,还是有其他发现。如:wirte(1,“Hello,world!”,strlen(“Hello,worl

6、d!”));其效果等同于我们使用printf来输出Hello,world。小节:Linux的标准输入输出,对应0,1,2三个文件,使调用printf/scanf外,我们使用文件操作的方式在输入和输出内容。接下来,我们来说说输入输出重定向的事,首先,我们来看程序例子:程序要求输入两个整数min,max,并做出相应判断。我们编译并执行程序:gccinout.c-oio3./io3不出意外,程序会不断闪烁光标提示我们输入,只有输入完数据后才能往下执行,显示结果。这简直没有什么好说的。接下来,我们在程序目录下创建一个in.txt,

7、使用gedit编辑它,加入两行,每行一个整数,如图:保存文件,然后我们在终端如此运行io3程序:./io30out.txt你又会发现,这次程序既不等用户输入,也没输出任何内容,就运行结束了。执行:ls我们看到目前下会多出一个out.txt,我们赶紧使用cat命令显示其内容:catout.txt你会发现

8、,out.txt文件中,正是我们程序运行要输出的内容!重定向执行过程和结果这面的两次运行示例,就是使用了重定向功能才达到了这样的结果。所谓重定向,就是改变输入输出的原来绑定的文件到指定的新文件。在本节开始的时候,我们使用:ls/proc/pid/fd–l查看程序文件句柄情况,其显示形式如下:lrwx------1dxldxl643月3009:580->/dev/pts/25每行的最后一列,显示的格式是:文件句柄号->句柄绑定的文件。如上面的一行,表示当前的0号句柄(标准输入)绑定的文件是/dev/pts/25(第25号终端),

9、也就是当前的标准输入是从第25号终端获取的,而终端的数据需要用户手动输入,所以在未执行输入重定向前,程序运行到scanf处是要等待用户输入的。而执行重定向后,如第一个例中的./io30

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。