嵌入式Linux应用编程各函数原型.docx
《嵌入式Linux应用编程各函数原型.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux应用编程各函数原型.docx(59页珍藏版)》请在冰豆网上搜索。
嵌入式Linux应用编程各函数原型
open()函数语法格式
所需头文件
#include
#include
#include
函数原型
intopen(constchar*pathname,intflags,intperms)
函数传入值
pathname
被打开的文件名(可包括路径名)
flag:
文件打开方式
O_RDONLY:
以只读方式打开文件
O_WRONLY:
以只写方式打开文件
O_RDWR:
以读/写方式打开文件
O_CREATE:
如果该文件不存在,就创建一个新的文件,并用第三方参数为其设置权限
O_EXCL:
如果使用O_CREATE时文件存在,则可返回错误消息。
这一参数可测试文件是否存在。
此时open是原子操作,防止多个进程同时创建同一个文件
O_NOCTTY:
使用本参数时,若文件为终端,那么该终端不会成为调用open()的进程的控制终端
O_TRUNC:
若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0
O_APPEND:
以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,将写入的数据添加到文件的末尾
perms
被打开文件的存取权限
可以用一组宏定义:
S_I(R/W/X)(USR/GRP/OTH)
其中R/W/X分别表示读/写/执行权限
USR/GRP/OTH分别表示文件的所有者/文件所属组/其他用户
(例如,S_IRUSR|S_IWUSR表示设置文件所有者的可读可写属性,八进制表示法中0600也表示同样的权限)
函数返回值
成功:
返回文件描述符
失败:
-1
close()函数格式
所需头文件
#include
函数原型
intclose(intfd)
函数传入值
fd:
文件描述符
函数返回值
0:
成功
-1:
出错
read()函数格式
所需头文件
#include
函数原型
ssize_tread(intfd,void*buf,size_tcount)
函数传入值
fd:
文件描述符
buf:
指定存储器存放读出数据的缓冲区
count:
指定读出的字节数
函数返回值
成功:
实际读出的字节数
0:
已到达文件尾
-1:
出错
write()函数格式
所需头文件
#include
函数原型
ssize_tread(intfd,void*buf,size_tcount)
函数传入值
fd:
文件描述符
buf:
指定存储器写入数据的缓冲区
count:
指定写入的字节数
函数返回值
成功:
实际读出的字节数
0:
已到达文件尾
-1:
出错
lseek()函数格式
所需头文件
#include
#include
函数原型
off_tlseek(intfd,off_toffset,intwhence)
函数传入值
fd:
文件描述符
offset:
偏移量,从起始位置所需要移动的距离,单位是字节,可正可负(向前移,向后移)
whence:
当前位置的基点
SEEK_SET:
当前位置为文件的开头,新位置为偏移量
SEEK_CUR:
当前位置为文件指针的位置,新位置为当前位置加上偏移量
SEEK_END:
当前位置为文件的结尾,新位置为文件大小加上偏移量大小
函数返回值
成功:
文件的当前位移
-1:
出错
fcntl()函数语法格式
所需头文件
#include
#include
#include
函数原型
intfcntl(intfd,intcmd,struckflock*lock)
函数传入值
fd
文件描述符
cmd
F_DUPFD:
复制文件描述符
F_GETFD:
获得fd的close-on-exec标志,若标志未设置,则文件经过exec()函数之后仍保持打开状态
F_SETFD:
设置close-on-exec标志,该标志由参数arg的FD_CLOEXEC位决定
F_GETFL:
得到open设置的标志
F_SETFL:
改变open设置的标志
F_GETLK:
根据lock描述,决定是否上文件锁
F_SETLK:
设置lock描述的文件锁
F_SETLKW:
这是F_SETLK的阻塞版本(命令名中的W表示wait)。
在无法获取锁时,会进入睡眠状态;如果可以获取锁或者捕捉到信号则会返回
lock
结构为flock,设置记录锁的具体状态
struckflock
{
shortl_type;//F_RDLCK读取锁(共享锁),F_WRLCK写入锁
(排斥锁),F_UNLCK解锁
off_tl_start;//加锁区域在文件中的相对位移量(字节),与l_whence值一起决定加锁区域的起始位置
shortl_whence;//相对位移量的起点,取值同lseek的whence
off_tl_len;//加锁区域的长度
pid_tl_pid;//进程id
}
函数返回值
成功:
0
出错:
-1
select()函数格式
所需头文件
#include
#include
#include
函数原型
intselect(intnumfds,fd_set*readfds,fd_set*writefds,fd_set*exeptfds,structtimeval*timeout)
函数传入值
numfds:
该参数值为需要监视的文件描述符的最大值加1
readfds:
由select()监视的读文件描述符集合
writefds:
由select()监视的写文件描述符集合
exeptfds:
由select()监视的异常处理文件描述符集合
timeout
NULL:
永远等待,直到捕捉到信号或文件描述符已准备好为止
具体值:
strucktimeval类型的指针,若等待了timeout时间还没有检测到任何文件描述符准备好,就立即返回
0:
从不等待,测试所有指定的文件描述符并立即返回
函数返回值
成功:
准备好的文件描述符
出错:
-1
超时:
0
select()文件描述符处理函数
FD_ZERO(fd_set*set)
清除一个文件描述符集
FD_SET(intfd,fd_set*set)
将一个文件描述符加入文件描述符集中
FD_CLR(intfd,fd_set*set)
将一个文件描述符从文件描述符集中清除
FD_ISSET(intfd,fd_set*set)
如果文件描述符fd为fd_set集中的一个元素,则返回非零值,可以用于测试调用select()后文件描述符集中的哪个文件描述符是否有变化
注:
select()函数中的timeout是一个structtimeval类型的指针,结构体结构如下:
structtimeval
{
longtv_sec;//秒数
longtv_unsec;//微秒数
}
poll()函数格式
所需头文件
#include
#include
函数原型
intpoll(structpollfd*fds,intnumfds,inttimeout)
函数传入值
fds:
structpollfd结构的指针,用于描述需要对哪些文件的哪些类型的操作进行监控
structpollfd
{
intfd;//需要监听的文件描述符
shortevents;//需要监听的事件
shortrevents;//已发生的事件
}
events成员描述需要监听哪些类型的事件,可以用以下几种标志来描述:
POLLIN:
文件中有数据可读
POLLPRI:
文件中有紧急数据可读
POLLOUT:
可以向文件写入数据
POLLERR:
文件中出现错误
POLLHUP:
与文件的连接被断开,只限于输出
POLLNVAL:
文件描述符是不合法的,即它并没有指向一个成功打开的文件
numfds:
需要监听的文件个数,即第一个参数所指向的数组中的元素数目
timeout:
表示poll阻塞的超时时间。
如果该值小于等于0,则表示无限等待
函数返回值
成功:
返回大于0的值,表示时间发生的pollfd结构的个数
0:
超时
-1:
出错
串口的设置主要是设置structtermios结构体的各成员值,结构体结构如下:
#include
structtermios
{
unsignedshortc_iflag;//输入模式标志
unsignedshortc_oflag;//输出模式标志
unsignedshortc_cflag;//控制模式标志
unsignedshortc_lflag;//本地模式标志
unsignedcharc_line;//线路规程
unsignedcharc_cc[NCC];//控制特性
speed_tc_ispeed;//输入速度
speed_tc_ospeed;//输出速度
}
c_cflag支持的常量名称
EXTA
外部时钟率A
EXTB
外部时钟率B
CSIZE
数据位的位掩码
CS5
5个数据位
CS6
6个数据位
CS7
7个数据位
CS8
8个数据位
CSTOPB
2个停止位(不设置则默认1个停止位)
CREAD
接收使能
PARENB
校验位使能
PARODD
使用奇校验而不使用偶校验
HUPCL
最后关闭时挂线(放弃DTR)
CLOCAL
本地连接(不改变端口所有者)
CRTSCTS
硬件流控
c_iflag支持的常量名称
IGNPAR
忽略奇偶校验错误
PARMRK
奇偶校验错误掩码
ISTRIP
裁减掉第8位比特
IXON
启动输出软件流控
IXOFF
启动输入软件流控
IXANY
允许输入任意字符可以重新启动输出(默认为输入起始字符才重启输出)
IGNBRK
忽略输入终止条件
BRKINT
当检测到输入终止条件时发送SIGINT信号
INLCR
将接收到的NL(换行符)转换为CR(回车符)
IGNCR
忽视接收到的CR(回车符)
ICRNL
将接收到的CR(回车符)转换为NL(换行符)
IUCLC
将接收到的大写字符映射为小写字符
IMAXBEL
当输入队列满时响铃
c_oflag支持的常量名称
OPOST
启用输出处理功能,如果不设置该标志则其它标志都被忽略
OLCUC
将输出中的大写字符转换成小写字符
ONLCR
将输出中的换行符转换成回车符
ONOCR
如果当前列号为0,则不输出回车符
OCRNL
将输出中的回车符转换成换行符
ONLRET
不输出回车符
OFILL
发送填充字符以提供延时
OFDEL
如果设置该标志,则表示填充字符为DEL字符,否则为NUL字符
NLDLY
换行符延时掩码
CRDLY
回车符延时掩码
TABDLY
制表符延时掩码
BSDLY
水平退格符延时掩码
VTDLY
垂直退格符延时掩码
FFLDY
换页符延时掩码
c_lflag支持的常量名称
ISIG
若收到信号字符(INTR、QUIT等),则会产生相应的信号
ICANON
启用规范模式
ECHO
启用本地回显功能
ECHOE
若设置ICANON,则允许退格操作
ECHOK
若设置ICANON,则KILL字符会删除当前行
ECHONL
若设置ICANON,则允许回显换行符
ECHOCTL
若设置ECHO,则控制字符(制表符、换行符等)会显示成”^X”,其中X的ASCII码等于给相应控制字符的ASCII码加上0x40。
例如,退格字符(0x08)会显示为”^H”(“H”的ASCII码为0x48)
ECHOKE
若设置ICANON,则允许回显在ECHOE和ECHOPRT中设定的KILL字符
NOFLSH
在通常情况下,当接收到INTR、QUIT和SUSP控制字符时,会清空输入和输出队列。
如果设置该标志,则所有的队列不会被清空
TOSTOP
若一个后台进程试图向它的控制终端进行写操作,则系统向该后台进程的进程组发送SIGTTOU信号。
该信号通常终止进程的执行
IEXTEN
启用输入处理功能
c_cc支持的常量名称
VINTR
中断控制字符,对应组合键为”Ctrl+C”
VQUIT
退出操作符,对应组合键为”Ctrl+Z”
VERASE
删除操作符,对应键为”Backspace”
VKILL
删除行符,对应组合键为”Ctrl+U”
VEOF
文件结尾符,对应组合键为”Ctrl+D”
VEOL
附加行结尾符,对应键为”Carriagereturn(CR)”
VEOL2
第二行结尾符,对应键为”Linefeed”
VMIN
指定最少读取的字符数
VTIME
指定读取的每个字符之间的超时时间
设置串口属性的基本流程
保存原先串口配置
if(tcgetattr(fd,&old_cfg)!
=0)
{
perror(“tcgetattr”)
return-1;
}
激活选项
newtio.c_cflag|=CLOCAL|CREAD;
cfmakeraw(&new_cfg);
设置波特率
cfsetispeed(&new_cfg,B115200);
cfsetospeed(&new_cfg,B115200);
设置字符大小
new_cfg.c_cflag&=~CSIZE;
new_cfg.c_cflag|=CS8;
设置奇偶校验
奇校验:
new_cfg.c_cflag|=(PARODD|PARENB);
new_cfg.c_iflag|=INPCK;
偶校验:
new_cfg.c_cflag|=PARENB;
new_cfg.c_cflag&=~PARODD;
new_cfg.c_iflag|=INPCK;
设置停止位
new_cfg.c_cflag&=~CSTOPB;
new_cfg.c_cflag|=CSTOPB;
设置最少字符和等待时间
new_cfg.c_cc[VTIME]=0;
new_cfg.c_cc[VMIN]=0;
清除串口缓冲
inttcdrain(intfd);//使程序阻塞,直到输出缓冲区的数据全部发送完毕
inttcflow(intfd,intaction);//用于暂停或重新开始输出
inttcflush(intfd,intqueue_selector);//用于清空输入/输出缓冲区
激活配置
tcsetattr(intfd,intoptional_actions,conststructtermios*termios_p);
注:
tflush()函数中queue_selector取值:
TCIFLUSH:
对接收到而未被读取的数据进行清空处理。
TCOFLUSH:
对尚未传送成功的输出数据进行清空处理。
TCIOFLUSH:
包括前两种功能,即对尚未处理的输入/输出数据进行清空处理。
optional_actions取值:
TCSANOW:
配置的修改立即生效。
TCSADRAIN:
配置的修改在所有写入fd的输出都传输完毕之后生效。
TCSAFLUSH:
所有已接收但未读入的输入都将在修改生效之前被丢弃。
fopen函数格式
所需头文件
#include
函数原型
FILE*fopen(constchar*path,constchar*mode)
函数传入值
path:
包含要打开的文件路径及文件名
mode:
文件打开状态
r/rb
打开只读/可读写文件,该文件必须存在
r+/r+b
w/wb
打开只写/可读写文件,若文件存在则文件长度清为0,即会擦写文件以前的内容;若不存在则建立该文件
w+/w+b
a/ab
以附加方式打开只写/可读写文件。
若文件不存在,则会建立该文件;如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留
a+/a+b
函数返回值
成功:
指向FILE的指针
失败:
NULL
fdopen()函数格式
所需头文件
#include
函数原型
FILE*fdopen(intfd,constchar*mode)
函数传入值
fd:
文件描述符
mode:
见上表
函数返回值
成功:
指向FILE的指针
失败:
NULL
freopen()函数格式
所需头文件
#include
函数原型
FILE*freopen(constchar*path,constchar*mode,FILE*stream)
函数传入值
path:
包含要打开的文件名及文件路径
mode:
见上表
stream:
已打开的文件指针
函数返回值
成功:
指向FILE的指针
失败:
NULL
fclose()函数格式
所需头文件
#include
函数原型
FILE*fclose(FILE*stream)
函数传入值
stream:
已打开的文件指针
函数返回值
成功:
0
失败:
EOF
fread()函数格式
所需头文件
#include
函数原型
size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream)
函数传入值
ptr:
存放读入记录的缓冲区
size:
读取的记录大小
nmemb:
读取的记录数
stream:
要读取的文件流
函数返回值
成功:
返回实际读取到的nmemb数目
失败:
EOF
fwrite()函数格式
所需头文件
#include
函数原型
size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream)
函数传入值
ptr:
存放写入记录的缓冲区
size:
写入的记录大小
nmemb:
写入的记录数
stream:
要写入的文件流
函数返回值
成功:
返回实际写入到的nmemb数目
失败:
EOF
字符输入函数格式
所需头文件
#include
函数原型
intgetc(FILE*stream)
intfgetc(FILE*stream)
intgetchar(void)
函数传入值
stream:
要输入的文件流
函数返回值
成功:
下一个字符
失败:
EOF
字符输出函数格式
所需头文件
#include
函数原型
intputc(intc,FILE*stream)
intstreamutc(intc,FILE*stream)
intputchar(intc)
函数返回值
成功:
字符c
失败:
EOF
行输入函数格式
所需头文件
#include
函数原型
char*gets(char*s)
intfgets(char*s,intsize,FILE*stream)
函数传入值
s:
要输入的字符串
size:
输入的字符串长度
stream:
对应的文件流
函数返回值
成功:
s
失败:
EOF
行输出函数格式
所需头文件
#include
函数原型
intputs(constchar*s)
intstreamuts(char*s,FILE*stream)
函数传入值
s:
要输入的字符串
stream:
对应的文件流
函数返回值
成功:
s
失败:
EOF
格式化输出函数格式1
所需头文件
#include
函数原型
intprintf(constchar*format,...)
intstreamrintf(FILE*stream,constchar*format,...)
intsprintf(char*buf,constchar*format,...)
函数传入值
format:
记录输出格式
stream:
文件流
buf:
记录输出缓冲区
函数返回值
成功:
输出字符数(sprintf返回存入数组中的字符数)
失败:
NULL
格式化输出函数格式2
所需头文件
#include
#include
函数原型
intvprintf(constchar*format,va_listarg)
intvstreamrintf(FILE*stream,constchar*format,va_listarg)
intvsprintf(char*buf,constchar*format,va_listarg)
函数传入值
format:
记录输出格式
stream:
文件流
buf:
记录输出缓冲区
arg:
相关命令参数
函数返回值
成功:
输出字符数(sprintf返回存入数组中的字符数)
失败:
NULL
格式化输入函数格式
所需头文件
#include
函数原型
intscanf(constchar*format,...)
intfscanf(FILE*stream,constchar*format,...)
intsscanf(char*buf,constchar*form