Linux c 文件操作杂笔

来源:互联网 发布:多态java有什么优点 编辑:程序博客网 时间:2024/06/04 18:05

菜鸟一个刚开始学习linux c语言,把自己学习中每天杂七杂八的小收获记录下来,以后好多熟悉一下!

1linux设备文件

        linux系统基于文件,硬件、软件全部可以用文件表示,你对这个文件操作就相当于操作对应的硬件设备。linux下的/dev目录下就存放了linux的设备文件,按照他们的存取数据的方式,可以分为:字符设备,块设备,伪设备。

        字符设备:每次与系统传输一个字符,如键盘设备。当你敲下linux是,键盘会把这串分成五个字符传输给系统,先传送l,最后传送x.

        块设备:设备与系统采用块的方式移动数据,如硬盘、内存区域等。块设备通常支持随机存取和寻址,并使用缓存器。当程序向设备发送了读取或者写入数据的请求时,系统会先把数据中的每一个字符存储在适当的缓存中。当缓存被填满时,再把数据传走,而后系统清空缓存。

     伪设备:设备节点并不一定要对应物理设备,如null,zero,full,loop,random,urandom(这个不太懂,百度的)

     下面讲一下一些特殊的设备:

    /dev/stdin指的就是键盘设备
    /dev/stdout指的就是标准输出,可以重定向给它的数据,最终发送到屏幕上
    /dev/stderr 指是错误输出,默认也是输出到屏幕上面,但是它的内容不能通过管道传递给grep,管道只能传递标准输出。
    /dev/null设备是个黑洞设备,它丢弃一切写入其中数据,空设备通常被用于丢弃不需要的输出流。(第一次听说,嘻嘻)
    /dev/zero  零字节源,只能读取到无限多的零字节
    /dev/random 随机数发生器。完全由用户的输入来产生随机数。
    /dev/sda  1个 SCSI 磁盘(整个磁盘

2、文件打开open函数的几个参数理解

O_NOCTTY 如果打开的文件指的是终端设备,则不将此设备分配作为此进程的控制终端。(not contral tty)
   O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。(true open clean)
  O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在

3、终端

串行端口终端(/dev/ttySn)是使用计算机串行端口连接的终端设备,计算机把每个串行端口都看作是一个字符设备

在命令行提示符下键入:echo test > /dev/ttyS0会把单词test发送到连接在ttyS0(COM1)端口的设备上。可接串口来实验。


控制终端(/dev/tty):如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令ps ax来查看进程与哪个控制终端相连

控制台终端(/dev/ttyn)当你在控制台上登录时,使用的是tty1。使用Alt+[F1F6]组合键时,我们就可以切换到tty2tty3等上面去。tty1tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上.

4getopt函数获取命令行参数


 函数声明:int getopt(int argc, char * const argv[], const char *optstring);getopt()用来分析命令行参数。参数argcargv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。

5I/O模型

select实现I/O复用:
 I/O处理的五种模型:
   1>阻塞I/O模型:若所调用的I/O函数没有完成相关的功能就会是进程挂起,直到相关数据到达才会返回如:终端、网络设备的访问
   2>非阻塞模型:当请求的I/O操作不能完成时,则不让进程休眠,而且返回一个错误如:open,read,write等。
   3>I/O多路转接模型:如果请求的I/O操作阻塞,且它不是真正阻塞I/O,而且让其中的一个函数等待,在这期间,I/O还能进行其他操作。如:select函数。 
   4>信号驱动I/O模型:在这种模型下,通过安装一个信号处理程序,系统可以自动捕获特定信号的到来, 从而启动I/O.
   5>异步I/O模型:在这种模型下,当一个描述符已准备好,可以启动I/O时,进程会通知内核,由内核进行处理。


 






原创粉丝点击