《Linux系统API函数手册.docx》由会员分享,可在线阅读,更多相关《Linux系统API函数手册.docx(44页珍藏版)》请在课桌文档上搜索。
1、(一)文献操作篇1、creat(建立文献)头文献1 #include2 include3 #include定义函数1intcreat(constchar*pathname,mode_tmode);函数说明参数Pathname指向欲建立的文献途径字符串。CreatO相称于使用下列的调用方式调用OPeno1open(constchar*pathname,(0_CREAT|0_WR0N1.Y|0_TRUNC);错误代码关于参数mode请参考OPenO函数。返回值Creato会返回新的文献描述词,若有错误发生则会返回1,并把错误代码设给errno。EEXIST参数pathname所指的文献已存在。EA
2、CCESS参数pathname所指定的文献不符合所规定测试的权限EROFS欲打开写入权限的文献存在于只读文献系统内EFAU1.T参数pathname指针超过可存取的内存空间EINVA1.参数mode不对的。Enametoolong参数pathname太长。ENOTDIR参数pathname为一目录ENOMEM核心内存局限性E1.OOP参数pathname有过多符号连接问题。EMFI1.E已达成进程可同时打开的文献数上限ENFI1.E已达成系统可同时打开的文献数上限附加说明Creat()无法建立特别的装置文献,假如需要请使用mknod()o2、open(打开文献)头文献1 #include2 #
3、include3 #include定义函数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也被设
4、立,此指令会去检查文献是否存在。文献若不存在则建立该文献,否则将导致打开文献错误。此外,若O-CREAT与O_EXC1.同时设立,并且欲打开的文献为符号连接,则会打开文献失败。O_NOCTTY假如欲打开的文献为终端机设备时,则不会将该终端机当成进程控制终端机。C1.TRUNC若文献存在并且以可写的方式打开时,此旗标会令文献长度清为0,而本来存于该文献的资料也会消失。O.APPEND当读写文献时会从文献尾开始移动,也就是所写入的数据会以附加的方式加入到文献后面。0_N0NB1.0CK以不可阻断的方式打开文献,也就是无论有无数据读取或等待,都会立即返回进程之中。O.NDE1.AY同O.NONB1.
5、OCKoO_SYNC以同步的方式打开文献。O.NOFO1.1.OW假如参数pathname所指的文献为一符号连接,则会令打开文献失败。o_directory假如参数pathname所指的文献并非为一目录,则会令打开文献失败。此为1.iIWX2.2以后特有的旅标,以避免一些系统安全问题。参数mode则有下列数种组合,只有在建立新文献时才会生效,此外真正建文献时的权限会受到UmaSk值所影响,因此该文献权限应当为(mode-umaks)。SRWXUOO700权限,代表该文献所有者具有可读、可写及可执行的权限。S_IRUSR或SREAD,004(X)权限,代表该文献所有者具有可读取的权限。SWUSR
6、或SWRITE,00200权限,代表该文献所有者具有可写入的权限。S_IXUSR或SEXEC,00100权限,代表该文献所有者具有可执行的权限。SRWXGOoo70权限,代表该文献用户组具有可读、可写及可执行的权限。SJRGRP00040权限,代表该文献用户组具有可读的权限。SWGRPOOo2()权限,代表该文献用户组具有可写入的权限。SXGRP(X)OIO权限,代表该文献用户组具有可执行的权限。SRWXOOOo07权限,代表其他用户具有可读、可写及可执行的权限。SJROTH00004权限,代表其他用户具有可读的权限S_IWOTH00002权限,代表其他用户具有可写入的权限。SJXOTH000
7、01权限,代表其他用户具有可执行的权限。返回值若所有欲核查的权限都通过了检查则返回0值,表达成功,只要有一个权限被严禁则返回-1。错误代码EEXIST参数pathname所指的文献己存在,却使用了C1.CREAT和C1.EXC1.旗标。EACCESS参数pathname所指的文献不符合所规定测试的权限。EROFS欲测试写入权限的文献存在于只读文献系统内。EFAU1.T参数pathname指针超过可存取内存空间。EINVA1.参数mode不对的。Enametoolong参数pathname太长。ENOTDIR参数pathname不是目录。ENOMEM核心内存局限性。E1.OOP参数pathnam
8、e有过多符号连接问题。EIOI/O存取错误3、close(关闭文献)头文献1#include定义函数1intclose(intfd);函数说明当使用完文献后若已不再需要则可使用CIOSe()关闭该文献,二Ck)Se()会让数据写回磁盘,并释放该文献所占用的资源。参数fd为先前由OPeno或Creato所返回的文献描述词。返回值若文献顺利关闭则返回0,发生错误时返回-1。错误代码EBADF参数fd非有效的文献描述词或该文献已关闭。附加说明虽然在进程结束时,系统会自动关闭已打开的文献,但仍建议自行关闭文献,并的确检查返回值。4、read(由已打开的文献读取数据)头文献1#include定义函数1s
9、size_tread(intfci,void*buf,size_tcount);函数说明read。会把参数fd所指的文献传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,假如返回0,表达已到达文献尾或是无可读取的数据,此外文献读写位置会随读取到的字节移动。附加说明假如顺利read。会返回实际读到的字节数,最佳能将返回值与参数CoUnt作比较,若返回的字节数比规定读取的字节数少,则有也许读到了文献尾、从管道(PiPe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回1,错误代码存入e11no
10、中,而文献读写位置则无法预期。错误代码EINTR此调用被信号所中断。EAGAIN当使用不可阻断I/O时(0_NONB1.OCK),若无数据可读取则返回此值。EBADF参数fd非有效的文献描述词,或该文献已关闭。5、write(将数据写入已打开的文献内)头文献1#include定义函数1ssize_twrite(intfd,constvoid*buf,size_tcount);函数说明Wrile()会把参数buf所指的内存写入COUnt个字节到参数fd所指的文献内。当然,文献读写位置也会随之移动。返回值假如顺利Write()会返回实际写入的字节数。当有错误发生时则返回错误代码存入errno中。错
11、误代码ElNTR此调用被信号所中断。EAGAlN当使用不可阻断I/O时(O_NONB1.OCK),若无数据可读取则返回此值。EADF参数fd非有效的文献描述词,或该文献已关闭。6、flock(锁定文献或解除锁定)头文献1#include定义函数1intflock(intfd,intoperation);函数说明fl。Cko会依参数operation所指定的方式对参数fd所指的文献做各种锁定或解除锁定的动作。此函数只能锁定整个文献,无法锁定文献的某一区域。参数operation有下列四种情况:1.OCK_SH建立共享锁定。多个进程可同时对同一个文献作共享锁定。1.OeK_EX建立互斥锁定。一个文
12、献同时只有一个互斥锁定。1.0CK_UN解除文献锁定状态。1.OCK_NB无法建立锁定期,此操作可不被阻断,立即返回进程。通常与1.oCK_SH或1.OCK_EX做OR(I)组合。单一文献无法同时建立共享锁定和互斥锁定,而当使用dup()或fork。时文献描述词不会继承此种锁定。返回值返回0表达成功,若有错误则返回-1,错误代码存于errno。7、ISeek(移动文献的读写位置)头文献1 #include2 #include定义函数1ofCtlseek(intfildes,off1.toffset,intwhence);函数说明每一个已打开的文献都有一个读写位置,当打开文献时通常其读写位置是指
13、向文献开头,若是以附加的方式打开文献(如0_APPEND),则读写位置会指向文献尾。当read。或Write()时,读写位置会随之增长,ISeek()便是用来控制该文献的读写位置。参数fikles为已打开的文献描述词,参数OffSet为根据参数whence来移动读写位置的位移数。参数whence为下列其中一种:SEEK.SET参数OffSet即为新的读写位置。SEEK.CUR以目前的读写位置往后增长OffSet个位移量。SEEK_END将读写位置指向文献尾后再增长OffSet个位移量。当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值的出现。下列是教特别的使用方式:
14、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 #include2 #include定义函数1 intfcntl(intfd,intc
15、md);2 intfcntl(intfd,intcmd,longarg);3 intfcntl(intfd,intcmd,structflock*lock);函数说明fcntl()用来操作文献描述词的些特性。参数fd代表欲设立的文献描述词,参数Cmd代表欲操作的指令。有以下几种情况:F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文献描述词,并且复制参数fd的文献描述词。执行成功则返回新复制的文献描述词。请参考dup2().F_GETFD取得ckse-on-exec旗标。若此旗标的FD_C1.OEXEC位为0,代表在调用exec()相关函数时文献将不会关闭。F_SETFD设立clo
16、se-on-exec旗标。该旗标以参数arg的FD_C1.OEXEC位决定。F_GETF1.取得文献描述词状态旗标,此旗标为OPen()的参数flags。F_SETF1.设立文献描述词状态旗标,参数arg为新旗标,但只允许O_APPEND、O.NONB1.OCK和C1.ASYNC位的改变,其他位的改变将不受影响。F_GET1.K取得文献锁定的状态。F_SET1.K设立文献锁定的状态。此时Hcok结构的1.type值必须是F_RD1.CK、F.WR1.CK或F_UN1.CKo假如无法建立锁定,则返回-1,错误代码为EACCES或EAGAIN。F-SET1.KWF-SET1.K作用相同,但是无法建
17、立锁定期,此调用会一直等到锁定动作成功为止。若在等待锁定的过程中被信号中断时,会立即返回-1,错误代码为ElNTR。参数IOCk指针为flock结构指针,定义如下1structflcok2(3 shortintl.type;/*锁定的状态*/4 shortint1.whence;/*决定1.Start位置*/5 off_tl_start;/*锁定区域的开头位置6 Of1.tUen;/*锁定区域的大小*/7 pid1.Pid;/*锁定动作的进程*/8;囱1.type有三种状态:F_RD1.CK建立一个供读取用的锁定F_WR1.CK建立一个供写入用的锁定F_UN1.CK删除之前建立的锁定l_whe
18、nce也有三种方式:SEEK.SET以文献开头为锁定的起始位置。SEEK.CUR以目前文献读写位置为锁定的起始位置SEEK.END以文献结尾为锁定的起始位置。返回值成功则返回0,若有错误则返回-1,错误因素存于ermo9、fgets(由文献中读取一字符串)头文献1include定义函数1char*fgets(char*s,intsize,FI1.E*stream);函数说明fgets()用来从参数Stream所指的文献内读入字符并存到参数S所指的内存空间,直到出现换行字符、读到文献尾或是已读了SiZe-I个字符为止,最后会加上NU1.1.作为字符串结束。返回值gets。若成功则返回s指针,返回
19、NU1.1.则表达有错误发生。10、fpuis(将一指定的字符串写入文献内)头文献1#include定义函数1intfputs(constchar*s,FI1.E*stream);函数说明fputs()用来将参数S所指的字符串写入到参数Stream所指的文献内。返回值若成功则返回写出的字符个数,返回EoF则表达有错误发生。(二)内存控制篇1、calloc(配置内存空间)头文献1#include定义函数1void*calloc(size_tnmemb,size_tsize);函数说明CalIOC()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这和使用
20、下列的方式效果相同:malloc(nmemb*size);但是,在运用CaHoCO配置内存时会将内存内容初始化为0。返回值若配置成功则返回一指针,失败则返回NU1.1.o2、free(释放原先配置的内存)头文献1#include定义函数1voidfree(void*ptr);函数说明参数Ptr为指向先前由ma11oc()CanOCo或realloc()所返回的内存指针。调用free。后Ptr所指的内存空间便会被收回。假若参数Ptr所指的内存空间已被收回或是未知的内存地址,则调用free()也许会有无法预期的情况发生。若参数Ptr为NU1.1.,则free。不会有任何作用。3、malloc(配置
21、内存空间)头文献1#include定义函数1void*malloc(size_tsize);函数说明malloc()用来配置内存空间,其大小由指定的size决定。返回值若配置成功则返回一指针,失败则返回NU1.1.o范例voidp=malloc(1024);/*配置Ik的内存*/()进程操作篇1、excel(执行文献)头文献1#include定义函数1intexecl(constchar*path,constchar*arg,.);函数说明execl()用来执行参数Path字符串所代表的文献途径,接下来的参数代表执行该文献时传递过去的argv(O)、argvl,最后一个参数必须用空指针(NU1
22、.1.)作结束。返回值假如执行成功则函数不会返回,执行失败则直接返回-1,失败因素存于ermo中。2、execlp(从PATH环境变量中查找文献并执行)头文献#include定义函数1intexeclp(constchar*file,constchar*arg,);函数说明execlp()会从PATH环境变量所指的目录中查找符合参数file的文献名,找到后便执行该文献,然后将第二个以后的参数当做该文献的argv0、argvl最后一个参数必须用空指针(NU1.1.)作结束。返回值假如执行成功则函数不会返回,执行失败则直接返回失败因素存于erm。中。错误代码参考execve()o3、exeev(执
23、行文献)头文献1#include定义函数1intexecv(constchar*path,char*constargv);函数说明execv()用来执行参数path字符串所代表的文献途径,与execl()不同的地方在于execve()只需两个参数,第二个参数运用数组指针来传递给执行文献。返回值假如执行成功则函数不会返回,执行失败则直接返回-1,失败因素存于erm。中。错误代码请参考execve()。4、execve(执行文献)头文献1#include定义函数1intexecve(constchar*filename,char*constargv,char*constenvp);函数说明exec
24、ve()用来执行参数filename字符串所代表的文献途径,第二个参数系运用数组指针来传递给执行文献,最后一个参数则为传递给执行文献的新环境变量数组。返回值假如执行成功则函数不会返回,执行失败则直接返回-1,失败因素存于erm。中。错误代码EACCES1 .欲执行的文献不具有用户可执行的权限。2 .欲执行的文献所属的文献系统是以noexec方式挂上。3 .欲执行的文献或script翻译器非一般文献。EPERM1 .进程处在被追踪模式,执行者并不具有r。Ot权限,欲执行的文献具有SUlD或SGID位。2 .欲执行的文献所属的文献系统是以nosuid方式挂上,欲执行的文献具有SUID或SGID位元
25、,但执行者并不具有root权限。E2BIG参数数组过大ENOEXEC无法判断欲执行文献的执行文献格式,有也许是格式错误或无法在此平台执行。EFAU1.T参数filename所指的字符串地址超过可存取空间范围。Enametoolong参数filename所指的字符串太长。ENOENT参数filename字符串所指定的文献不存在。ENOMEM核心内存局限性EN0TDIR参数filename字符串所包含的目录途径并非有效目录EACCES参数filename字符串所包含的目录途径无法存取,权限局限性E1.OOP过多的符号连接etxtbusy欲执行的文献已被其他进程打开并且正把数据写入该文献中EIOI/
26、O存取错误ENFI1.E已达成系统所允许的打开文献总数。EMFI1.E已达成系统所允许单一进程所能打开的文献总数。EINVA1.欲执行文献的E1.F执行格式不只一个PTjlNTERP节区EISDIRE1.F翻译器为一目录E1.IBBADE1.F翻译器有问题。5、execvp(执行文献)头文献1#include定义函数1intexecvp(constchar*file,char*constargv);函数说明execvp()会从PATH环境变量所指的目录中查找符合参数file的文献名,找到后便执行该文献,然后将第二个参数argv传给该欲执行的文献。返回值假如执行成功则函数不会返回,执行失败则直接
27、返回-1,失败因素存于erm。中。错误代码请参考execve()。6、exit(正常结束进程)头文献1#include定义函数1voidexit(intstatus);函数说明exit。用来正常终结目前进程的执行,并把参数StatUS返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文献。7、_exit(结束进程执行)头文献1#include定义函数1void_exit(intstatus);函数说明_exit()用来立刻结束目前进程的执行,并把参数StauIS返回给父进程,并关闭未关闭的文献。此函数调用后不会返回,并且会传递SlGCH1.D信号给父进程,父进程可以由Wait函数取得
28、子进程结束状态。附加说明,exit()不会解决标准I/O缓冲区,如要更新缓冲区请使用exitO08、vfork(建立一个新的进程)头文献1#include定义函数1pid_tvfork(void);函数说明Vfbrk()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量、已打开的文献代码、工作目录和资源限制等。1.iniIX使用COPyon-Write(CoW)技术,只有当其中一进程试图修改欲复制的空间时才会做真正的复制动作,由于这些继承的信息是复制而来,并非指相同的内存空间,因此子进程对这些变量的修改和父进程并不会同步。此外,子进程不会继承父
29、进程的文献锁定和未解决的信号。注意,1.inUX不保证子进程会比父进程先执行或晚执行,因此编写程序时要留意死锁或竞争条件的发生。返回值假如Vfork()成功则在父进程会返回新建立的子进程代码(PlD),而在新建立的子进程中则返回Oo假如Vfork失败则直接返回-1,失败因素存于ermo中。错误代码EAGAlN内存局限性。ENOMEM内存局限性,无法配置核心所需的数据结构空间。9、getpid(取得进程辨认码)头文献1#include定义函数1pid_tgetpid(void);函数说明getpid()用来取得目前进程的进程辨认码,许多程序运用取到的此值来建立临时文献,以避免临时文献相同带来的问
30、题。返回值目前进程的进程辨认码10、getppid(取得父进程的进程辨认码)头文献1include定义函数1pid_tgetppid(void);函数说明getppid()用来取得目前进程的父进程辨认码。返回值目前进程的父进程辨认码。11、Wait(等待子进程中断或结束)头文献1 #include2 #include定义函数1pid_twait(int*status);函数说明wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。假如在调用wait()时子进程已经结束,则Wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数StatUS返回,而子进程的进程辨认码也会一快
31、返回。假如不在意结束状态值,则参数status可以设成NU1.1.o子进程的结束状态值请参考waitpid()o返回值假如执行成功则返回子进程辨认码(PID),假如有错误发生则返回失败因素存于errno中。12、waitpid(等待子进程中断或结束)头文献1 #include2 #include定义函数1pid_twaitpid(pid_tpid,i11t*status,intoptions);函数说明WaitPid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。假如在调用Waito时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数StamS返回,
32、而子进程的进程辨认码也会一快返回。假如不在意结束状态值,则参数StatUS可以设成NU1.1.。参数Pid为欲等待的子进程辨认码,其他数值意义如下:pidO等待任何子进程辨认码为Pid的子进程。参数OPtiOn可认为0或下面的OR组合WNOHANG假如没有任何已经结束的子进程则立即返回,不予以等待。Wuntraced假如子进程进入暂停执行情况则立即返回,但结束状态不予以理睬。子进程的结束状态返回后存于StatUs,底下有几个宏可判别结束情况WIFEXITED(StatUS)假如子进程正常结束则为非O值。WEXlTSTATUS(StatUS)取得子进程exit()返回的结束代码,般会先用WIFE
33、XITED来判断是否正常结束才干使用此宏。WIFSlGNA1.ED(StalUS)假如子进程是由于信号而结束则此宏值为真WTERMSIG(StatUS)取得子进程因信号而中止的信号代码,一般会先用WlFSlGNA1.ED来判断后才使用此宏。WlFSToPPED(StauIS)假如子进程处在暂停执行情况则此宏值为真。一般只有使用Wuntraced时才会有此情况。WSToPSlG(StatUS)取得引发子进程暂停的信号代码,一般会先用WIFSTOPPED来判断后才使用此宏。返回值假如执行成功则返回子进程辨认码(PID),假如有错误发生则返回-1。失败因素存于erm。中。(四)信号解决篇1、siga
34、ction(查询或设立信号解决方式)头文献1#include定义函数1intsigaction(intsignum,conststructsigaction*act,structsigaction*oldact);函数说明SigaCtion()会依参数signum指定的信号编号来设立该信号的解决函数。参数signum可以指定SIGKI1.1.和SIGSTOP以外的所有信号。如参数结构SigaCtion定义如下1structsigaction23 void(*sa_handler)(int);4 sigset_tsa_mask;5 intsa_flags;6 void(*sa_restorer)
35、(void);7 )sa_handler此参数和Signalo的参数handler相同,代表新的信号解决函数,其他意义请参考signal()osa_mask用来设立在解决该信号时暂时将sa_mask指定的信号搁置。sa_restorer此参数没有使用。sa_flags用来设立信号解决的其他相关操作,下列的数值可用。OR运算(|)组合a_nocldstop:假如参数signum为Sigchld,则当子进程暂停时并不会告知父进程SA_ONESHOT/SA_RESETHAND:当调用新的信号解决函数前,将此信号解决方式改为系统预设的方式。SA_RESTART:被信号中断的系统调用会自行重启SA_NO
36、MASK/SA_NODEFER:在解决此信号未结束前不理睬此信号的再次到来。假如参数OkiaCt不是NU1.1.指针,则本来的信号解决方式会由此结构sigaction返回。返回值执行成功则返回0,假如有错误则返回错误代码EINVA1.参数signum不合法,或是企图拦截SIGKI1.1./SIGSTOPSIGKI1.1.信号EFAU1.T参数act,oldact指针地址无法存取。ElNTR此调用被中断2、sigaddset(增长一个信号至信号集)头文献1#include定义函数1intsigaddset(sigset_t*set,intsignum);函数说明SigaddSet()用来将参数s
37、ignum代表的信号加入至参数set信号集里。返回值执行成功则返回0,假如有错误则返回-1。错误代码EFAU1.T参数set指针地址无法存取ElNVA1.参数signum非合法的信号编号3、Sigdelset(从信号集里删除一个信号)头文献1#include定义函数1intsigdelset(sigset_t*set,i11tsignum);函数说明SigdelSeK)用来将参数SignUm代表的信号从参数Set信号集里删除。返回值执行成功则返回0,假如有错误则返回错误代码EFAU1.T参数set指针地址无法存取EINVA1.参数signum非合法的信号编号4、SigemPtySet(初始化信
38、号集)头文献1 #include定义函数1 intsigemptyset(sigset_t*set);函数说明SigemPtySeto用来将参数Set信号集初始化并清空。返回值执行成功则返回0,假如有错误则返回错误代码EFAU1.T参数set指针地址无法存取5、SigfinSeI(将所有信号加入至信号集)头文献1#include定义函数1intsigfillset(sigset_t*set);函数说明SigfmSeto用来将参数Set信号集初始化,然后把所有的信号加入到此信号集里。返回值执行成功则返回0,假如有错误则返回附加说明EFAU1.T参数set指针地址无法存取6、SigiSmember
39、(测试某个信号是否已加入至信号集里)头文献1include定义函数Iintsigismember(constsigset_t*set,intsignum);函数说明SigiSmemberO用来测试参数signum代表的信号是否已加入至参数Set信号集里。假如信号集里已有该信号则返回1,否则返回0。返回值信号集已有该信号则返回1,没有则返回0。假如有错误则返回-1。错误代码EFAU1.T参数set指针地址无法存取EINVA1.参数signum非合法的信号编号7、Signa1(设立信号解决方式)头文献1include定义函数Ivoid(*signal(intsignum,void(*handler
40、)(int)(int);函数说明SignaIo会依参数signum指定的信号编号来设立该信号的解决函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。假如参数handler不是函数指针,则必须是下列两个常数之一:SIGJGN忽略参数signum指定的信号。SIG.DF1.将参数SignUm指定的信号重设为核心预设的信号解决方式。关于信号的编号和说明,请参考附录D返回值返回先前的信号解决函数指针,假如有错误则返回SIG.ERR(-l)o附加说明在信号发生跳转到自定的handler解决函数执行后,系统会自动将此解决函数换回本来系统预设的解决方式,假如要改变此操作请改用sigacti
41、on().8、sleep(让进程暂停执行一段时间)头文献1#include定义函数1unsignedintsleep(unsignedintseconds);函数说明SIeeP()会令目前的进程暂停,直到达成参数SeeOndS所指定的时间,或是被信号所中断。返回值若进程暂停到参数seconds所指定的时间则返回(),若有信号中断则返回剩余秒数。9、PeiTOr(打印犯错误因素信息字符串)头文献1#include定义函数1 voidperror(constchar*s);函数说明PeiTOrO用来将上一个函数发生错误的因素输出到标准错误(Stderr)。参数S所指的字符串会先打印出,后面再加上错
42、误因素字符串。此错误因素依照全局变量errno的值来决定要输出的字符串。返回值10、mkfifo(建立具名管道)头文献2 #include3 #include定义函数1intmkfifo(constchar*pathname,mode_tmode);函数说明mkfifo()会依参数pathname建立特殊的FlFo文献,该文献必须不存在,而参数mode为该文献的权限(mode%umask),因此UmaSk值也会影响到FIFO文献的权限。MkfifO()建立的FIFO文献其他进程都可以用读写一般文献的方式存取。当使用OPen()来打开FIFO文献时,0.N0NB1.0CK旗标会有影响1、当使用O
43、_NoNB1.oCK旗标时,打开FIFO文献来读取的操作会立刻返回,但是若还没有其他进程打开FIFo文献来读取,则写入的操作会返回ENXIo错误代码。2、没有使用O_NONB1.OCK旗标时,打开FIFO来读取的操作会等到其他进程打开FIFO文献来写入才正常返回。同样地,打开FIFo文献来写入的操作会等到其他进程打开FIFO文献来读取后才正常返回。返回值若成功则返回0,否则返回-1,错误因素存于errno中。错误代码EACCESS参数pathname所指定的目录途径无可执行的权限EEXIST参数pathname所指定的文献已存在。Enametoolong参数pathname的途径名称太长。EN
44、OENT参数pathname包含的目录不存在ENOSPC文献系统的剩余空间局限性ENOTDIR参数pathname途径中的目录存在但却非真正的目录。EROFS参数Pathname指定的文献存在于只读文献系统内。11、pclose(关闭管道I/O)头文献1include定义函数1intpclose(FI1.E*stream);函数说明PCIoSe()用来关闭由popen所建立的管道及文献指针。参数stream为先前由PoPenO所返回的文献指针。返回值返回子进程的结束状态。假如有错误则返回-1,错误因素存于errno中。错误代码ECHI1.DPCloSe()无法取得子进程的结束状态。12、pipe(建立管道)头文献1#include定义函数1intpipe(intfiledes2);函数说明pipe()