您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > linux编程常用函数大全
系统调用-创建:intcreat(constchar*filename,mode_tmode)filename:要创建的文件名(包含路径,缺省为当前路径)mode:创建模式常见创建模式:S_IRUSR可读S_IWUSR可写S_IXUSR可执行S_IRWXU可读、写、执行系统调用-打开intopen(constchar*pathname,intflags)intopen(constchar*pathname,intflags,mode_tmode)pathname:要打开的文件名(包含路径,缺省为当前路径)flags:打开标志常见的打开标志:O_RDONLY只读方式打开O_WRONLY只写方式打开O_RDWR读写方式打开O_APPEND追加方式打开O_CREAT创建一个文件O_NOBLOCK非阻塞方式打开当我们操作完文件以后,需要关闭文件:intclose(intfd)fd:文件描述符系统调用-读:intread(intfd,constvoid*buf,size_tlength)功能:从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。系统调用-写:intwrite(intfd,constvoid*buf,size_tlength)功能:把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。系统调用-定位:intlseek(intfd,offset_toffset,intwhence)功能:将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。whence可使用下述值:SEEK_SET:相对文件开头SEEK_CUR:相对文件读写指针的当前位置SEEK_END:相对文件末尾offset可取负值,表示向前移动。例如下述调用可将文件指针相对当前位置向前移动5个字节:lseek(fd,-5,SEEK_CUR)系统调用-访问判断:有时我们需要判断文件是否可以进行某种操作(读,写等),这时可以使用access函数:intaccess(constchar*pathname,intmode)pathname:文件名称mode:要判断的访问权限。可以取以下值或者是他们的组合。R_OK:文件可读,W_OK:文件可写,X_OK:文件可执行,F_OK文件存在。返回值:当我们测试成功时,函数返回0,否则如果一个条件不符时,返回-1。库函数-创建和打开:FILE*fopen(constchar*filename,constchar*mode)filename:打开的文件名(包含路径,缺省为当前路径)vmode:打开模式库函数-读:size_tfread(void*ptr,size_tsize,size_tn,FILE*stream)功能:从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指的字符数组中,返回实际已读取的字节数。库函数-写:size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream)功能:从缓冲区ptr所指的数组中把n个字段写到stream指向的文件中,每个字段长为size个字节,返回实际写入的字段数。库函数-读字符:intfgetc(FILE*stream):从指定的文件中读一个字符库函数-写字符:intfputc(intc,FILE*stream):向指定的文件中写入一个字符库函数-格式化读:fscanf(FILE*stream,char*format[,argument...]):从一个流中进行格式化输入库函数-格式化写:intfprintf(FILE*stream,char*format[,argument,...]):格式化输出到一个流中库函数-定位:intfseek(FILE*stream,longoffset,intwhence)whence:SEEK_SET从文件的开始处开始搜索SEEK_CUR从当前位置开始搜索SEEK_END从文件的结束处开始搜索路径获取:在编写程序的时候,有时候需要得到当前路径。C库函数提供了getcwd来解决这个问题:char*getcwd(char*buffer,size_tsize)我们提供一个size大小的buffer,getcwd会把当前的路径名copy到buffer中.如果buffer太小,函数会返回-1。创建目录:intmkdir(char*dir,intmode)功能:创建一个新目录。返回值:0表示成功,-1表述出错。时间获取:time_ttime(time_t*tloc)功能:获取日历时间,即从1970年1月1日0点到现在所经历的秒数。时间转化:structtm*gmtime(consttime_t*timep)功能:将日历时间转化为格林威治标准时间,并保存至TM结构。structtm*localtime(consttime_t*timep)功能:将日历时间转化为本地时间,并保存至TM结构。时间保存:structtm时间显示:char*asctime(conststructtm*tm)功能:将tm格式的时间转化为字符串,如:SatJul3008:43:032005vchar*ctime(consttime_t*timep)功能:将日历时间转化为本地时间的字符串形式。获取时间:intgettimeofday(structtimeval*tv,structtimezone*tz)功能:获取从今日凌晨到现在的时间差,常用于计算事件耗时。structtimeval{inttv_sec;//秒数inttv_usec;//微妙数};延时执行:unsignedintsleep(unsignedintseconds)功能:使程序睡眠seconds秒。voidusleep(unsignedlongusec)功能:使程序睡眠usec微秒。pid_tgetpid(void):获取本进程IDvpid_tgetppid(void):获取父进程ID。pid_tfork(void):创建子进程fork的奇妙之处在于它被调用一次,却返回两次,它可能有三种不同的返回值:1.在父进程中,fork返回新创建的子进程的PID;2.在子进程中,fork返回0;3.如果出现错误,fork返回一个负值pid_tvfork(void):创建子进程。区别:1.fork:子进程拷贝父进程的数据段;vfork:子进程与父进程共享数据段2.fork:父、子进程的执行次序不确定;vfork:子进程先运行,父进程后运行exec用被执行的程序替换调用它的程序。区别:fork创建一个新的进程,产生一个新的PID。exec启动一个新程序,替换原有的进程,因此进程的PID不会改变。intexecl(constchar*path,constchar*arg1,....)参数:path:被执行程序名(含完整路径)。arg1–argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束。intexeclp(constchar*path,constchar*arg1,…)参数:path:被执行程序名(不含路径,将从path环境变量中查找该程序)。arg1–argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束。intexecv(constchar*path,char*constargv[])参数:path:被执行程序名(含完整路径)。argv[]:被执行程序所需的命令行参数数组。intsystem(constchar*string)功能:调用fork产生子进程,由子进程来调用/bin/sh-cstring来执行参数string所代表的命令。pid_twait(int*status):阻塞该进程,直到其某个子进程退出。现在Linux使用的进程间通信方式包括:1、管道(pipe)和有名管道(FIFO)2、信号(signal)3、消息队列4、共享内存5、信号量6、套接字(socket)管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。无名管道由pipe()函数创建:intpipe(intfiledis[2]);当一个管道建立时,它会创建两个文件描述符:filedis[0]用于读管道,filedis[1]用于写管道。关闭管道只需将这两个文件描述符关闭即可,可以使用普通的close函数逐个关闭。intmkfifo(constchar*pathname,mode_tmode):创建命名管道(FIFO)pathname:FIFO文件名mode:属性(见文件操作章节)一旦创建了一个FIFO,就可用open打开它,一般的文件访问函数(close、read、write等)都可用于FIFO。发送信号的主要函数有kill和raise。区别:Kill既可以向自身发送信号,也可以向其他进程发送信号。与kill函数不同的是,raise函数是向进程自身发送信号。intkill(pid_tpid,intsigno)intraise(intsigno)kill的pid参数有四种不同的情况:1、pid0将信号发送给进程ID为pid的进程。2、pid==0将信号发送给同组的进程。3、pid0将信号发送给其进程组ID等于pid绝对值的进程。4、pid==-1将信号发送给所有进程。unsignedintalarm(unsignedintseconds):经过了指定的seconds秒后会产生信号SIGALRM。如果不捕捉此信号,则默认动作是终止该进程。intpause(void):只有执行了一个信号处理函数后,挂起才结束。pause函数使调用进程挂起直至捕捉到一个信号。void(*signal(intsigno,void(*func)(int)))(int)typedefvoid(*sighandler_t)(int)sighandler_tsignal(intsignum,sighandler_thandler))Func可能的值是:1、SIG_IGN:忽略此信号2、SIG_DFL:按系统默认方式处理3、信号处理函数名:使用该函数处理共享内存实现分为两个步骤:一、创建共享内存,使用shmget函数。二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。intshmget(key_tkey,intsize,intshmflg):key标识共享内存的键值:0/IPC_PRIVATE。当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中又设置IPC_PRIVATE这个标志,则同样会创建一块新的共享内存。返回值:如果成功,返回共享内存标识符;如果失败,返回-1。intshmat(intshmid,char*shmaddr,intflag)参数:shmid:shmget函数返回的共享存储标识符flag:决定以什么方式来确定映射的地址(通常为0)返回值:如果成功,则返回共享内存映射到进程中的地址;如果失败,则返回-1。intshmdt(char*shmaddr):当一个进程不再需要共享内存时,需要把它从进程地址空间中脱离。目前主要有两种类型的消息队列:POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用。消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值。key_tftok(char*pathname,charproj):返回文件名对应的键值。pathname:文件名proj:项目名(不为0即可)intmsgget(key_tkey,intmsgflg)key:键值,由ftok获得。msgflg:标志位。返回值:与健值key相对应的消息队列描述字。IPC_CREAT:创建新的消息
本文标题:linux编程常用函数大全
链接地址:https://www.777doc.com/doc-3887025 .html