Linux系统API函数手册.docx
(一)文献操作篇1、creat(建立文献)头文献1 #include<sys/types.h>2 include<sysstat.h>3 #include<fcntl.h>定义函数1intcreat(constchar*pathname,mode_tmode);函数说明参数Pathname指向欲建立的文献途径字符串。CreatO相称于使用下列的调用方式调用OPeno1open(constchar*pathname,(0_CREAT|0_WR0N1.Y|0_TRUNC);错误代码关于参数mode请参考OPenO函数。返回值Creato会返回新的文献描述词,若有错误发生则会返回1,并把错误代码设给errno。EEXIST参数pathname所指的文献已存在。EACCESS参数pathname所指定的文献不符合所规定测试的权限EROFS欲打开写入权限的文献存在于只读文献系统内EFAU1.T参数pathname指针超过可存取的内存空间EINVA1.参数mode不对的。Enametoolong参数pathname太长。ENOTDIR参数pathname为一目录ENOMEM核心内存局限性E1.OOP参数pathname有过多符号连接问题。EMFI1.E已达成进程可同时打开的文献数上限ENFI1.E已达成系统可同时打开的文献数上限附加说明Creat()无法建立特别的装置文献,假如需要请使用mknod()o2、open(打开文献)头文献1 #include<sys/types.h>2 #include<sys/stat.h>3 #include<fcntl.h>定义函数1 iniopen(constchar*pathname,intflags);2 intopen(constchar*pathname,i11tflags,mode_tmode);函数说明参数pathname指向欲打开的文献途径字符串。下列是参数flags所能使用的旗标:C1.RDoN1.Y以只读方式打开文献0.WR0N1.Y以只写方式打开文献C1.RDWR以可读写方式打开文献。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标运用OR(I)运算符组合。C1.CREAT若欲打开的文献不存在则自动建立该文献。O_EXC1.假如O_CREAT也被设立,此指令会去检查文献是否存在。文献若不存在则建立该文献,否则将导致打开文献错误。此外,若O-CREAT与O_EXC1.同时设立,并且欲打开的文献为符号连接,则会打开文献失败。O_NOCTTY假如欲打开的文献为终端机设备时,则不会将该终端机当成进程控制终端机。C1.TRUNC若文献存在并且以可写的方式打开时,此旗标会令文献长度清为0,而本来存于该文献的资料也会消失。O.APPEND当读写文献时会从文献尾开始移动,也就是所写入的数据会以附加的方式加入到文献后面。0_N0NB1.0CK以不可阻断的方式打开文献,也就是无论有无数据读取或等待,都会立即返回进程之中。O.NDE1.AY同O.NONB1.OCKoO_SYNC以同步的方式打开文献。O.NOFO1.1.OW假如参数pathname所指的文献为一符号连接,则会令打开文献失败。o_directory假如参数pathname所指的文献并非为一目录,则会令打开文献失败。此为1.iIWX2.2以后特有的旅标,以避免一些系统安全问题。参数mode则有下列数种组合,只有在建立新文献时才会生效,此外真正建文献时的权限会受到UmaSk值所影响,因此该文献权限应当为(mode-umaks)。SRWXUOO700权限,代表该文献所有者具有可读、可写及可执行的权限。S_IRUSR或SREAD,004(X)权限,代表该文献所有者具有可读取的权限。SWUSR或SWRITE,00200权限,代表该文献所有者具有可写入的权限。S_IXUSR或SEXEC,00100权限,代表该文献所有者具有可执行的权限。SRWXGOoo70权限,代表该文献用户组具有可读、可写及可执行的权限。SJRGRP00040权限,代表该文献用户组具有可读的权限。SWGRPOOo2()权限,代表该文献用户组具有可写入的权限。SXGRP(X)OIO权限,代表该文献用户组具有可执行的权限。SRWXOOOo07权限,代表其他用户具有可读、可写及可执行的权限。SJROTH00004权限,代表其他用户具有可读的权限S_IWOTH00002权限,代表其他用户具有可写入的权限。SJXOTH00001权限,代表其他用户具有可执行的权限。返回值若所有欲核查的权限都通过了检查则返回0值,表达成功,只要有一个权限被严禁则返回-1。错误代码EEXIST参数pathname所指的文献己存在,却使用了C1.CREAT和C1.EXC1.旗标。EACCESS参数pathname所指的文献不符合所规定测试的权限。EROFS欲测试写入权限的文献存在于只读文献系统内。EFAU1.T参数pathname指针超过可存取内存空间。EINVA1.参数mode不对的。Enametoolong参数pathname太长。ENOTDIR参数pathname不是目录。ENOMEM核心内存局限性。E1.OOP参数pathname有过多符号连接问题。EIOI/O存取错误3、close(关闭文献)头文献1#include<unistd.h>定义函数1intclose(intfd);函数说明当使用完文献后若已不再需要则可使用CIOSe()关闭该文献,二Ck)Se()会让数据写回磁盘,并释放该文献所占用的资源。参数fd为先前由OPeno或Creato所返回的文献描述词。返回值若文献顺利关闭则返回0,发生错误时返回-1。错误代码EBADF参数fd非有效的文献描述词或该文献已关闭。附加说明虽然在进程结束时,系统会自动关闭已打开的文献,但仍建议自行关闭文献,并的确检查返回值。4、read(由已打开的文献读取数据)头文献1#include<unistd.h>定义函数1ssize_tread(intfci,void*buf,size_tcount);函数说明read。会把参数fd所指的文献传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,假如返回0,表达已到达文献尾或是无可读取的数据,此外文献读写位置会随读取到的字节移动。附加说明假如顺利read。会返回实际读到的字节数,最佳能将返回值与参数CoUnt作比较,若返回的字节数比规定读取的字节数少,则有也许读到了文献尾、从管道(PiPe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回1,错误代码存入e11no中,而文献读写位置则无法预期。错误代码EINTR此调用被信号所中断。EAGAIN当使用不可阻断I/O时(0_NONB1.OCK),若无数据可读取则返回此值。EBADF参数fd非有效的文献描述词,或该文献已关闭。5、write(将数据写入已打开的文献内)头文献1#include<unistd.h>定义函数1ssize_twrite(intfd,constvoid*buf,size_tcount);函数说明Wrile()会把参数buf所指的内存写入COUnt个字节到参数fd所指的文献内。当然,文献读写位置也会随之移动。返回值假如顺利Write()会返回实际写入的字节数。当有错误发生时则返回错误代码存入errno中。错误代码ElNTR此调用被信号所中断。EAGAlN当使用不可阻断I/O时(O_NONB1.OCK),若无数据可读取则返回此值。EADF参数fd非有效的文献描述词,或该文献已关闭。6、flock(锁定文献或解除锁定)头文献1#include<sys/file.h>定义函数1intflock(intfd,intoperation);函数说明fl。Cko会依参数operation所指定的方式对参数fd所指的文献做各种锁定或解除锁定的动作。此函数只能锁定整个文献,无法锁定文献的某一区域。参数operation有下列四种情况:1.OCK_SH建立共享锁定。多个进程可同时对同一个文献作共享锁定。1.OeK_EX建立互斥锁定。一个文献同时只有一个互斥锁定。1.0CK_UN解除文献锁定状态。1.OCK_NB无法建立锁定期,此操作可不被阻断,立即返回进程。通常与1.oCK_SH或1.OCK_EX做OR(I)组合。单一文献无法同时建立共享锁定和互斥锁定,而当使用dup()或fork。时文献描述词不会继承此种锁定。返回值返回0表达成功,若有错误则返回-1,错误代码存于errno。7、ISeek(移动文献的读写位置)头文献1 #include<sys/types.h>2 #include<unistd.h>定义函数1ofCtlseek(intfildes,off1.toffset,intwhence);函数说明每一个已打开的文献都有一个读写位置,当打开文献时通常其读写位置是指向文献开头,若是以附加的方式打开文献(如0_APPEND),则读写位置会指向文献尾。当read。或Write()时,读写位置会随之增长,ISeek()便是用来控制该文献的读写位置。参数fikles为已打开的文献描述词,参数OffSet为根据参数whence来移动读写位置的位移数。参数whence为下列其中一种:SEEK.SET参数OffSet即为新的读写位置。SEEK.CUR以目前的读写位置往后增长OffSet个位移量。SEEK_END将读写位置指向文献尾后再增长OffSet个位移量。当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值的出现。下列是教特别的使用方式:1)欲将读写位置移到文献开头时Jseek(intfildes,O,SEEK.SET);2)欲将读写位置移到文献尾时:lseek(intfildes,O,SEEK_END);3)想要取得目前文献位置时:lseek(intfildes,O,SEEK.CUR);返回值当调用成功时则返回目前的读写位置,也就是距离文献开头多少个字节。若有错误则返回-1,ermo会存放错误代码。附加说明1.inUX系统不允许ISeek()对Hy装置作用,此项动作会令ISeekO返回ESPlPE。8、fcntl(文献描述词操作)头文献1 #include<unistd.h>2 #include<fcntl.h>定义函数1 intfcntl(intfd,intcmd);2 intfcntl(intfd,intcmd,longarg);3 intfcntl(intfd,intcmd,structflock*lock);函数说明fcntl()用来操作文献描述词的些特性。参数fd代表欲设立的文献描述词,参数Cmd代表欲操作的指令。有以下几种情况:F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文献描述词,并且复制参数fd的文献描述词。执行成功则返回新复制的文献描述词。请参考dup2().F_GETFD取得ck>se-on-exec旗标。若此旗标的FD_C1.OEXEC位为0,代表在调用exec()相关函数时文献将不会关闭。F_SETFD设立close-on-e