ls -C /dev |head -5
lp* 打印机
fd* 软驱
sd* SCSI设备分区
tty* 终端
dsp文件是到声卡的一个连接
/dev/mouse读取这个文件可以读取鼠标的单击和位置变化
所有与文件相关的操作:open,read,write,lseek,close,stat
终端支持read和write,但不支持lseek...
>tty //用来告诉用户所在终端的文件名
/dev/pts/0
设备文件的i节点存储的是指向内核子程序的指针,而不是文件的大小和存储列表。
内核中传输设备数据的子程序被成为设备驱动程序
主设备号确定处理该设备的子程序,而从设备号被作为参数传递给该程序
fcntl
目标 控制文件描述符
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
int result=fcntl(int fd,int cmd);
int result=fcntl(int fd,int cmd,long arg);
int result=fcntl(int fd,int cmd,struct flock *lockp);
fd 需要控制的文件描述符
cmd 需进行的操作
arg 操作的参数
lock 锁信息
属性:自动添加模式(防止竞争的发生)
int s;
s=fcntl(fd,F_GETFL);
s|=O_APPEND;
result=fcntl(fd,F_SETFL,s);
if(result==-1)
perror("error");
else
write(fd,&rec,1);//write record at end;
原子操作
open支持的标志位
O_CREAT 如果不存在,则创建该文件
O_TURNC 如果文件存在,则将文件长度置为
O_EXCL 防止两个进程创建同样的文件
O_EXCL、O_CREAT组合用来消除以下竞争情况:如果两个进程同时创建相同的文件会发生什么情况呢?
stty -echo//不回显字符
stty erase X //设置删除操作
改变终端驱动的设置:
a 从驱动程序获得属性
b 修改所要修改的属性
c 将修改过的属性送回驱动程序
struct termios attribs;
tcgetattr(fb,&setting);
setting.c_lflag|=ECHO;
tcsetarr(fd,TCSANOW,&setting);
int result=tcgetattr(int fd,struct termios *info);
int result=tcgetattr(int fd,int when,struct termios *info);
when:
TCSANOW 立即更新驱动程序设置
TCSADRAIN 等待直到驱动程序队列中的所有输出都被传送到终端,然后进行驱动程序的更新
TCSAFLUSH 等待直到驱动程序队列中的所有输出都被传送出去,然后释放所有队列中的所有输入数据,并进行一定的变化。
测试位 if(flagset&MASK)
置位flagset|=MASK
清除位flagset&=~MASK
相关文章
- Unix/Linux环境C编程入门教程(23) 字符数字那些事儿
- 《Unix-Linux编程实践教程》读书笔记(六)
- Unix/Linux编程实践教程(一:进程、管道)
- Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装
- Unix/Linux环境C编程入门教程(38) shell命令进阶演示
- Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
- Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试
- Unix/Linux环境C编程入门教程(1) Solaris 11 64bit环境搭建
- Unix/Linux编程实践教程四 stty
- Unix/Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7.0环境搭建