- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
跟我学Linu编程-3-输入输出
Linux编程中的输入输出,如果只从C语言角度来看,可以说也没有什么特殊之处,本章节也并不打算花笔墨来介绍printf,scanf的用法。但如果从Linux系统角度去看,又有不少有意思有东西,如输入输出重定向,管道,彩色字符显示等等,值得玩耍一翻,这才是接下来要我要介绍的重点。
Linux程序,运行后,通常会打开三个文件,其编号分别为0,1,2(我们称之为句柄号)。其中0是标准输入,1是标准输出,2为错误输出。我们来看个例子:
程序什么也不做,一直sleep循环,以便于我们能够有时间查看它运行时的输入输出文件句柄。执行:
gcc inout.c -o io1
编译完成后,我们执行程序:
./io1
再开一个新终端,执行:
ps -a| grep io1
会得到如下的信息:
26065 pts/25 00:00:00 io1
第一个整数是我们程序的进程编号(每次运行均有可能不一样),我们接下来的命令中需要用到它:
ls /proc/26065/fd –l
会显示这样的信息:
lrwx------ 1 dxl dxl 64 3月 30 09:58 0 - /dev/pts/25
lrwx------ 1 dxl dxl 64 3月 30 09:58 1 - /dev/pts/25
lrwx------ 1 dxl dxl 64 3月 30 09:55 2 - /dev/pts/25
显示的正是进程语法为:gcc inout.c -o io2
./io2
我们会意外发现,”Hello, world!”并没有在屏幕上输出!
我们通过之前所说的方法,来查看
发现,1号文件确实是不存在了。原理也不难理解, printf的作用就是在标准输出(终端屏幕)上显示东西,现在标准输出被关闭了,当然也就什么也显示不出来。
同理,如果close(0),你程序中的scanf就得不到输入内容;close(2),通过perror输出的错误信息将不再被显示。除close外,还有read,write一系列针对文件句柄进行操作的函数,如果将其施加在0, 1, 2这三个文件句柄上,还是有其他发现。如:
wirte(1, “Hello, world!\n”, strlen(“Hello, world!\n”));
其效果等同于我们使用printf来输出Hello, world。
小节:
Linux的标准输入输出,对应0, 1, 2三个文件,使调用printf/scanf外,我们使用文件操作的方式在输入和输出内容。
接下来,我们来说说输入输出重定向的事,首先,我们来看程序例子:
程序要求输入两个整数min, max,并做出相应判断。我们编译并执行程序:
gcc inout.c -o io3
./io3
不出意外,程序会不断闪烁光标提示我们输入,只有输入完数据后才能往下执行,显示结果。这简直没有什么好说的。
接下来,我们在程序目录下创建一个in.txt,使用gedit编辑它,加入两行,每行一个整数,如图:
保存文件,然后我们在终端如此运行io3程序:
./io3 0in.txt
你会意外发现,程序这次居然没有等待用户输入,直接输出结果了,而且min和max还是in.txt的值:
correct! min (12) is not big than max(130)
我们再换个玩法:
./io3 0in.txt 1out.txt
你又会发现,这次程序既不等用户
cat out.txt
你会发现,out.txt文件中,正是我们程序运行要输出的内容!
重定向执行过程和结果
这面的两次运行示例,就是使用了重定向功能才达到了这样的结果。所谓重定向,就是改变输入输出的原来绑定的文件到指定的新文件。在本节开始的时候,我们使用:
ls /proc/pid/fd –l
查看程序文件句柄情况,其显示形式如下:
lrwx------ 1 dxl dxl 64 3月 30 09:58 0 - /dev/pts/25
每行的最后一列,显示的格式是:文件句柄号-句柄绑定的文件。如上面的一行,表示当前的0号句柄(标准输入)绑定的文件是/dev/pts/25(第25号终端),也就是当前的标准输入是从第25号终端获取的,而终端的数据需要用户手动输入,所以在未执行输入重定向前,程序运行到scanf处是要等待用户输入的。
而执行重定向后,如第一个例中的./io3 0in.txt,意思是将0号句柄与in.txt文件绑定,也就是标准输入与in.txt绑定,这时程序执行scanf的时候,是从in.txt里直接读数,而非终端中读数,因此无需用户输入直接就从in.txt获取内容了。
如果你有兴趣,可以在主程序最后的一行加上sleep循环,使用ls命令查看程序句柄,
您可能关注的文档
- 走一步,再走一 二次修改.doc
- 走出六大家庭教误区.doc
- 走出强迫的泥潭森田疗法指导集锦 作者.doc
- 走向高考--215高考一轮总复习人教A版数学2-5.doc
- 走进永康——民文化.doc
- 走进高中生物 教案.doc
- 赵奎 小学语 优质课堂观摩活动心得体会.doc
- 赵家岔小学运动秩序册.doc
- 赵建屹 公共政实践报告.doc
- 赵文丽自考本科业论文.doc
- 2025年中国航空器行业发展监测及投资战略规划研究报告.docx
- 中国热水循环系统市场全面调研及行业投资潜力预测报告.docx
- 中国挖掘机制造行业市场发展监测及投资战略规划报告.docx
- 中国齿轮零部件行业市场调查研究及投资战略咨询报告.docx
- 2025年中国PCB存放运输车行业市场深度研究及投资规划建议报告.docx
- 中国视频监控设备行业发展运行现状及投资潜力预测报告.docx
- 2021-2026年中国警用与特种装备市场深度分析及投资战略咨询报告.docx
- 2020-2025年中国舰船动力系统市场运行态势及行业发展前景预测报告.docx
- 2021-2026年中国核电风机行业市场供需格局及行业前景展望报告.docx
- 解析XXXX年中国单片机行业数据跟踪与发展前景分析预测报告.docx
最近下载
- 03《中国药典》2020年版非无菌产品微生物限度检查:计数法解读.pptx VIP
- 解读成长型思维.pdf VIP
- 温州市名师工作室学员手册.doc
- SMED培训资料课件.ppt
- 2024年山东经贸职业学院单招职业技能测试题库(名师推荐).docx VIP
- 贵州贵阳市大数据产业集团招聘笔试题库2024.pdf
- Unit 5 Fun Club Section B 2a-2b Writing 课件 人教版(2024)英语七年级上册.pptx
- 2024年度民主生活会个人对照检查材料(带头增强党性、严守纪律、砥砺作风方面)+带头增强党性、严守纪律、砥砺作风方面存在的主要问题.doc VIP
- 黑布林阅读初二11《杰克的威士本游园会》中文版.pdf
- 项目级安全交底.docx VIP
文档评论(0)