嵌入式linuxC函数整理

为便于以后的查阅与复习本文整理了嵌入式linux C中用到的多数函数,包括以下9个大类:

    内存管理

    字符串处理

    时间函数

    随机函数

    文件IO函数

    标准IO函数

    格式化输入输出和错误处理函数

    文件和目录函数进程相关函数

一:内存管理函数

   1相关函数:malloc

    头文件:#include

    函数原型:void *malloc(size_t size)

    函数说明:分配内存

    返回值:成功返回分配的内存首地址,失败返回NULL

   2相关函数:free

    头文件:#include

    函数原型:void free(void *ptr)

    函数说明:释放内存,释放ptr为函数malloc返回的指针,调用free后ptr所指向的内存会被

    统回收

   3mmap(内存映射)

    头文件:#include<unistd.h>

            #include<sys/mman.h>

    函数原型: void mmap(void *star,size_t length,int prot,int flags,int fd,off_t 

    offset);

    函数说明:mmap用来将某个文件映射到内存中,通过对内存的读写实现对文件的操作。参数含

    义如下:

         start:指向映射后的内存起始地址,通常设为NULL,表示让系统来选定映射地址。操作

         成功后,start里的值为映射后的内存首地址。

         length:指定文件中被映射的部分的长度,以字节为单位,0表示全部映射。

         prot:映射区域的使用方式,有以下选项

              PROT_EXEC  映射区域可被执行

       PROT_READ  映射区域可被读取

              PROT_WRITE 映射区域可被写入

              PROT_NONE  映射区域不能存取

         flag: 设置映射区域的属性,有以下选项

              MAP_FIXED 如果start指定的区域无法映射,则放弃映射

              MAP_SHARED  对映射区域的修改会复制回原文件,而且允许其他映射该文件的进程

                         共享

              MAP_LOCKED  将映射区域锁住

         fd:文件描述符,代表要映射的文件

         offset:文件映射的偏移量。通常设置为0,代表从文件开始处映射,offset必须是分页

                 大小的整数倍

    返回值:无

   4相关函数:munmap

    头文件:#include<unistd.h>

    头文件:#include<sys/mman.h>

   函数原型: int munmap(void *start,size_t length);

    函数说明:取消参数start所指向的内存映射内存。当进程结束时,内存映射会自动取消,但

              关闭对应的文件描述符不会取消映射。

    返回值:0:操作成功

            -1:操作失败,错误原因存于errno中

二字符串处理函数:

   1:相关函数:bzero

    头文件:include<sys/mman.h>

    函数原型:void bzero(void *s ,int n)

    函数说明:将参数s指向的内存区域前n个字节,全部设置为0

    返回值:无

   2相关函数:memcpy

    头文件:#include<string.h>

    函数原型:void *memcpy(void *dest,const void *src,size_t n)

    函数说明:拷贝src所指向的内存前n个字节到dest所指向的内存单元

    返回值:返回dest的值

   3相关函数:memcmp

    头文件:#include<string.h>

    函数原型:int memcpy(const void *s1,const void *s2,size_t n);

    函数说明:比较s1,s2所指向的内存区域前n个字节

    返回值:0:完全相同

            大于0:s1指向内存中的值大于s2指向内存中的值

            小于0:s1指向内存中的值小于s2指向内存中的值

   4相关函数:memset

    头文件:#include<string.h>

    函数原型:void *memset(void *s,int c,size_t n);

    函数说明:将参数s所指向的内存前n个字节以参数c填入

    返回值:返回s的值

   5相关函数:strcat

    头文件:#include<string.h>

    函数原型:char *strcat(char *dest,const char *src)

    函数说明:将参数str指向的字符串拷贝到dest指向的字符串尾,dest指向的内存空间要足够

              大。

    返回值:返回dest的值 

   6相关函数:strncat

    头文件:#include<string.h>

    函数原型:char *strncat(char *dest,const char *src,size_t n)

    函数说明:将参数str指向的字符串拷贝n个字符到dest指向的字符串尾,dest指向的内存

              空间要足够大。

    返回值:返回dest的值 

   7相关函数:strcmp

    头文件:#include<string.h>

    函数原型:int strcmp(const char *s1t,const char *s2)  

    函数说明: 比较s1,s2所指向的字符串

    返回值:0:相等

            大于0:s1指向内容较大

            小于0:s1指向内容较小

   8相关函数:strncmp

    头文件:#include<string.h>

    函数原型:int strncmp(const char *s1t,const char *s2,size_t n);  

    函数说明: 比较s1,s2所指向的字符串前n个字符

    返回值:0:相等

            大于0:s1指向内容较大

            小于0:s1指向内容较小

   9相关函数strcpy

    头文件:#include<string.h>

    函数原型:char *strcpy(char *dest,const char *src)

    函数说明:src指向内容拷贝到dest指向的地址

    返回值:返回dest的值

   10相关函数strncpy

    头文件:#include<string.h>

    函数原型:char *strncpy(char *dest,const char *src,size_t n)

    函数说明:src指向前n个字符内容拷贝到dest指向的地址

    返回值:返回dest的值

   11相关函数strlen

     头文件:#inlude<srring.h>

     函数原型:size_t strlen(const char *s)

     函数说明:计算s指向字符串长度,不包含\0

     返回值:s中包含字符的个数

   12相关函数:strstr

     头文件:#include<sring.h>

     函数原型:char *strstr(const char *haystack,const char *needle)

     函数说明:在字符串haystack中查找字符串needle

     返回值:返回指定字符第一次出现的地址,否则返回0

三时间函数:

    1:time

       头文件:#include<time.h>

       函数原型 time_t time(time_t *timer)

       函数说明 NULL获取日历时间,timer为数值时设置日历时间

       返回值:返回日历时间秒数

   2:localtime

      头文件:<time.h>

       函数原型:struct tm *localtime(const time_t *clock)

       函数说明:将clock指向的时间转换为本地时间储存在tm结构体

       返回值:返回指向tm结构体的指针

 

       struct tm
       {
         int tm_sec;                  
         int tm_min;                  
         int tm_hour;                 
         int tm_mday;                 
         int tm_mon;                  
         int tm_year;                 
         int tm_wday;                 
         int tm_yday;                 
         int tm_isdst;                

         }

    3 gmtime

      头文件:<time.h>

      函数原型:struct tm *gmtime(long *clock)

      函数说明:通过clock指向的日历时间获得格林威治时间

      返回值:返回指向tm结构体的指针

    4 asctiem

      头文件:<time.h>

      函数原型:char *asctime(const struct tm *tblock)

      函数说明:转换时间为ASCII码

      返回值:指向字符串的指针,格式星期,月,日,小时,分,秒,年

    5 ctime

       头文件:time.h

       函数原型:char *ctime(const time_t *time)

       函数说明:将日期和时间转换成字符串格式

       返回值:返回字符串,格式星期,月,日,小时,分,秒,年

   6 gettimeofday

       头文件sys/time.h     

       函数原型:int gettimeofday(struct timeval *tv, struct timezone *tz);   

                 其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果,若不使用则传入NULL 

      返回值:成功返回0,失败返回1,errno存储错误

     结构体timeval的定义为:

    struct timeval {

    long tv_sec; // 秒数

    long tv_usec; // 微秒数

    }

  7 settimeofday

    头问件:sys/time.h unistd.h

    函数原型:int settimeofday(struct timeval *tv, struct timezone *tz);   

                 将时间修改为tv指向的结构体,参数tz用设置时区,若不使用则传入NULL 

      返回值:成功返回0,失败返回1,errno存储错误

四:随机数

   1 srand

    头问件:stdlib.h

    函数原型:void srand(unsigned seed);

    函数说明:用来设置rand()产生随机数的种子,seed必须为整数,通常使用getpid()(防止随机数每次

    重复)或time(0)返回值当做种子

    返回值:无

  2 rand

   头文件:stdlib.h

   函数原型:int rand(void)

   函数说明:返回一随即数,范围在0到RAND_MAX之间,使用前必须用srand()设置好随机种子

   返回值:随即数

五文件IO函

   1 open

    头文件:fcntl.h

            sys/type.h

            sys/stat.h

    函数原型:int open(const char *pathname,int flags)

              int open (const char *pathname,int flags,mode_t mode)

    函数说明: pathname指向要打开的文件路径字符串

              参数flags 标志:

                  O_RDONLY 以只读方式打开文件

                  O_WRONLY 以只写方式打开文件

                  O_RDWR   以读写方式打开文件

                  O_CREAT  若要打开的文件不存在则创建

                  O_EXCL   若O_CREAT也被设置,则此选项会去检查文件是否存在,若不存在则创建,否则

                           出错

                  O_NOCTTY 若要打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机

                  O_TRUNG  若文件存在且以可写的方式打开时,此方式会将文件长度清为0

                  O_APPEND 写入的数据会以附加的方式追加到文件尾

                  O_NONBLOCK以非阻塞方式打开

            参数mode含义如下:

                  S_IRWXU    0700

                  S_IRUSR    0400

                  S_IWUSR    0200

                  S_IXUSR    0100

                  S_IRWXG    0070

                  S_IRGRP    0040

                  S_IWGRP    0020

                  S_IXGRP    0010

                  S_IRWXO    0007    

                  S_IROTH    0004

                  S_IWOTH    0002

                  S_IXOTH    0001 

     返回值:成功返回要打开文件的文件描述符,否则返回-1  

   2 close

     头文件:unistd.h

     函数原型:int close(int fd)

     函数说明:使用完文件后利用close()关闭该文件,fd为文件描述符

     返回值:成功返回0,否则返回-1

   3 read

     头文件:unistd.h

     函数原型:ssize_t read (int fd,void *buf,size_t count)

     函数说明:从参数fd所指向的文件中读取count个字节的数据到buf指向的内存中

     返回值:返回成功读取的字节数,若返回0则表示已到达文件尾或无数据可读

   4 write

     头文件:unistd.h

     函数原型:ssize_t write (int fd,const void *buf,size_t count)

     函数说明:把参数buf 指向的内存count个字节的数据读到fd所指向的文件内

     返回值:成功返回实际写入的字节数,若有错误则返回-1   

 

   5 lseek

     头文件:unistd.h

             sys/type.h

     函数原型:off_t lseek(int fd ,off_t offset,int whence)

     函数说明:每个已打开的文件都有一个读写位置。当打开文件时通常读写位置是指向文件开始;若是以

               附加方式打开,则读写的位置会指向文件尾。对文件的读写操作会引起起始位置的变化,该函

               数可改变读写指针的位置

               fd:文件描述符

               offset :依据参数whence来移动读写位置的偏移量

               whence:SEEK_SET  0文件的开始处为基准点

                       SEEK_CUR  1文件的当前位置为基准点

                       SEEK_END  2文件的末尾为基准点

     返回值:成功时返回距文件开头的字节数,出错返回-1

   6 sync

     头文件:unistd.h

     函数原型:int sync(void)

     函数说明:把系统缓冲区数据写回磁盘,确保数据同步

     返回值:操作成功返回0

六标准IO函数

   1 fopen

     头文件:stdio.h

     函数原型:FILE * fopen(const char *path,const char *mode)

     函数说明:path指向要打开文件的路径和文件名

               mode:要打开文件的方式

                     r    打开只读文件,该文件必须存在

                     r+   打开可读写文件,该文件必须存在

                     w    打开只写文件,若该文件存在,则长度清为0;若不存在则创建

                     w+   打开可读写文件,若该文件存在,则长度清为0;若不存在则创建

                     a    以附加的方式打开只写文件,若不存在则创建,存在则写入的数据添加到文件尾

                     a+   以附加的方式打开可读写文件,若不存在则创建,存在则写入的数据添加到文件尾

                     以上选项均可添加选项b,表示打开文件为二进制,但在linux中不作区分

     返回值:成功返回指向该流的问价指针。若失败则返回NULL

   2 fclose

     头文件:stdio.h

     函数原型: int fclose(FILE *stream)

     函数说明:关闭fopen打开的文件

     返回值:成功返回0否则返回1

   3 feof

     头文件stdio.h

     函数原型:int feof(FILE *stream)

     函数说明:检测是否读取到了文件末尾

     返回值:返回非0值表示读取到了文件末尾

  4 fflush

    头问件:stdio.h

    函数原型:int fflush(FILE *stream)

    函数说明:强制将缓冲区里的数据写回stream指向的文件。如果stream为NULL,会将所有打开文件的数据

              更新

    返回值:成功返回0,否则返回-1

  5 getchar

    头文件:stdio.h

    函数原型: int getc(stdio)

    函数说明:从标准输入中读取一个字符,相当于getc(stdio)由宏实现:#define getchar() getc

    (stdin)。

    返回值:返回读取到得字符,如返回-1表示有错误发生

  6 getc

    头文件:stdio.h

    函数原型:int getc(FILE *stream)

    函数说明:从参数stream指向的文件中读取一个字符 #define getc(_stream) (--(_stream)->_cnt >= 0?

               0xff & *(_stream)->_ptr++ : _filbuf(_stream)) 
    返回值:返回读取到的字符,若返回-1表示到了文件末尾

  7 fgetc

    头文件:stdio.h

    函数原型:int fgetc(FILE *stream)

    函数说明:从参数stream指向的文件中读一个字符

    返回值:返回读取到的字符,返回-1表示到了文件尾

  8 fgets

    头文件 stdio.h    

    函数原型: char *fgets(char *s,int size,FILE *stream)

    函数说明:从参数stream指向的文件中读取字符并存放到参数s所指向的内存空间,直到出现换行符、文件

               末尾或者已经已读取了size-1个字符为止,最后会加上‘\0’作为字符串结束

    返回值:  操作成功返回s的值,有错误则返回NULL

  9 fread

    头问件:stdio.h

    函数原型:size_t fread (void *ptr,size_t size,size_t nmemb,FILE *stream)

    函数说明:从stream中读取nmemb个size大小的数据到ptr

    返回值:返回读取到基本数据单位的个数

  10 putchar

     头文件:stdio.h

     函数原型: int putchar(int c)

     函数说明: 将参数c字符写到标准输出设备

     返回值:返回输出到的字符,失败返回-1

  11 putc

     头文件:stdio.h

     函数原型:int putc(int c,FILE *stream)

     函数说明:将参数c转为unsigned char后写入stream指定的文件中,作用和fputc相同,为宏定义

     

  12 fputc

     头文件:stdio.h

     函数原型:int fputc(int c,FILE *stream)

     函数说明:将参数c,转为unsigned char后写入stream指定的文件中  

     返回值:返回输出到的字符,失败返回-1

  13 puts

     头文件:stdio.h

     函数原型:int puts(const char *s)

     函数说明:将参数s指向的字符串写到标准输出设备

     返回值:返回输出的字符个数,失败返回-1

  14 fputs

     头文件:stdio.h

     函数原型:int fputs(const char *s,FILE *stream)

     函数说明:将参数s指向的字符串写到stream指向的文件

     返回值:返回输出的字符个数,失败返回-1

  15 fwrite

     头文件:stdio.h

     函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream)

     函数说明: 将ptr指向的内容写入stream指向的文件中,size要写入数据的基本单位,大小为字节

                nmemb表示要写入的基本数据单位的个数

     返回值:返回实际写入的基本数据的单位个数

  16 fseek

     头文件:stdio.h

     函数原型:int fseek(FILE *stream,long offset,int whence)

     函数说明:stream已打开的文件指针

               offset 移动读写值的位移数

               whence:基准点 SEEK_SET 文件开始处为基准点

                              SEEK_CUR文件当前位置为基准点

                              SEEK_END文件末尾为基准点

     返回值:成功返回0,否则返回-1

  17 ftell

     头文件:stdio.h

     函数原型:long ftell(FILE *stream)

     函数说明:取得文件流当前的读取位置

     返回值:成功返回当前的读写位置,否则返回-1

  18 rewind

     头文件:stdio.h

     函数原型:void rewind(FILE *stream)

     函数说明:把文件流的读写位置移动到文件的开始处

     返回值:无

七  文件和目录函数

    1 printf

      头文件:stdio.h

      函数原型:int printf(const char *format,...)

      函数说明:printf会根据参数format来转换并格式化数据,然后将结果写到标准输出,参数format可包含

      下列三种字符类型:

                       1直接输出的一般文本

                       2ASCII控制字符

                       3格式转换字符

      返回值:执行成功返回输出的字符数,失败返回-1,原因存于errno中 

   2 fprintf

     头文件:stdio.h

     函数原型:int fprintf(FILE *stream,const char *format,...)

     函数说明:根据参数format来转换并格式化数据,然后将结果写到stream指向的文件中

     返回值:执行成功返回输出的字符数,失败返回-1,原因存于errno中

   3 sprintf

     头文件stdio.h

     函数原型:int sprintf(char *str,const char *format,...)

     函数说明:根据参数format来转换并格式化数据,然后将结果复制到str指向的字符数组

     返回值:执行成功返回str的长度,失败返回-1,原因存于errno中

   4 scanf

     头文件:stdio.h

     函数原型:int scanf (const char *format,...)

     函数说明:printf会将输入输入的数据根据参数format来转换数据并格式化数据,然后将结果保存到指定

               的变量中

     返回值:执行成功返回输入的参数的个数,失败返回-1,原因存于errno中

   5 fscanf

     头文件:stdio.h

     函数原型:int fscanf (FILE *stream,const char *format,...)

     函数说明:从参数stream指定的文件流中读取字符串,再根据参数format来转换并格式化数据

     返回值:执行成功返回参数数目,失败返回-1,失败原因存于errno中

   6 strerror

     头文件:string.h

             errno.h

     函数原型:char *strerror(int errnum)

     函数说明:根据errnum(定义在errno.h中)来查询其错误原因的描述字符串并返回指向该字符串的指针

     返回值:指向描述错误原因的字符串

   7 perror

     头文件:string.h

     函数原型:void perror(const char *s)

     函数说明:perror将上一个函数发生错误的原因输出到标准输出。s所指字符串会先输出,再输出错误原

              因。错误原因依据全局变量errno的值来确定

     返回值:无

   8 ferror

     头文件:stdio.h

     函数原型:int ferror(FILE *stream)

     函数说明:ferror 检查参数stream所指向的文件流是否发生了错误情况

      返回值:有错误返回非0值

八文件和目录参数

   1 stat

     头文件:sys/stat.h

             unistd.h

     函数原型:int stat(const char *path,struct stat *buf)

     函数说明:将path指向的文件的属性复制到buf指向的结构体中,

     返回值:成功返回0失败返回-1,错误存储于errno中

      struct stat {
              mode_t    st_mode;    // 文件类型和访问权限          
              dev_t     st_dev;     // 文件的设备编号
              dev_t     st_rdev;    // 文件为设备文件则为设备文件编号
              nlink_t   st_nlink;   // 文件的硬链接数
              uid_t     st_uid;     // 文件所有者的用户识别码
              gid_t     st_gid;     // 文件所属组的识别码
              off_t     st_size;    // 文件大小,以字节计算
              time_t    st_atime;   // 文件最近一次被存取或执行的时间
              time_t    st_mtime;   // 文件最后一次被修改的时间
              time_t    st_ctime;   // i_node最近一次被修改的时间
              long      st_blksize; // 文件系统I/O缓冲区的大小
              long      st_blocks; -// 占用文件块的个数
              };

   2 fstat

     头文件:sys/stat.h

             unistd.h

     函数原型:int fstat(int fd,struct stat *buf)

     函数说明:将fd指向的文件的属性复制到buf的结构中,与stat不同之处在于一个是指针指定,一个是描述

               符指定

     返回值:成功返回0失败返回-1,错误存储于errno中

   3 lstat

     头文件:sys/stat.h

             unistd.h

     函数原型:int lstat(const char *path,struct stat *buf)

     函数说明:与stat区别在于,目标文件为符号链接时,lstat会返回该链接本身的属性

     返回值:成功返回0失败返回-1,错误存储于errno中

   4 link

     头文件:unistd.h

     函数原型:int link(const char *oldpath,const char *newpath)

     函数说明:用newpath指定的名称创建一个新的硬链接到参数oldpath所指定的已存在文件

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   5 symlink

     头文件:unistd.h

     函数原型:int symlink(const char *oldpath,const char *newpath)

     函数说明:创建一个符号链接

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   6 chmod

     头文件: sys/type.h

              sys/stat.h
     函数原型:int chmod(const char * path,mode_t mode)

     函数说明:按mode指定的权限来修改path指向的文件

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   7 truncate

     头文件: unistd.h

     函数原型:int truncate(const char *path,off_t length)

     函数说明:将path指定文件的大小修改为 length指定的大小,若原文件大小超过lenth,则超出部分散去

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   8 rename

     头文件:stdio.h

     函数原型:int rename(const char *oldpath,const char *newpath)

     函数说明:将oldpath所指向的文件名改为newpath所指向的文件名

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   9 remove

    头文件:stdio.h

    函数原型:int remove(const char *path)

    函数说明:删除path所指定的文件

    返回值:执行成功返回0,失败返回-1,错误代码存于errno

   10 chdir

     头文件:stdio.h

     函数原型:int chdir(const char *path)

     函数说明:将当前的工作目录改变到path指定的路径

     返回值:执行成功返回0,失败返回-1,错误代码存于errno

   11 mkdir

      头文件:sys/stat.h

      函数原型:int mkdir(const char *filename,mode_t mode)

      函数说明:创建mode权限的filename指向的目录

      返回值:执行成功返回0,失败返回-1,错误代码存于errno

   12  opendir

      头文件: sys/stat.h

               dirent.h

      函数原型:DIR *opendir(const char *name)

      函数说明:opendir 打开name指定的目录,并返回DIR形式的目录流

      返回值:成功返回目录流,失败返回NULL,错误代码存于errno

   13  readdir

      头文件:sys/stat.h

              dirent.h

      函数原型:struct dirent *readdir(DIR *dir)

      函数说明:返回dir指向目录流的下一个entry

      返回值:执行成功返回下一个条目,失败或读到目录文件尾返回NULL

     

     struct dirent
     {
      long d_ino;
      off_t d_off;
      unsigned short d_reclen;
      unsigned char d_type;
      char d_name [NAME_MAX+1];
      }
   14 closedir
     头文件:sys/type.h
             dirent.h
     函数原型:int closedir(DIR *dir)
     函数说明:关闭dir指向的目录流
     返回值:成功返回0失败-1,errno存储错误代码
   15 getcwd
      头文件:unistd.h
      函数原型:char *getcwd(char *buf,size_t size)
      函数说明:将当前工作的目录绝对路径复制到参数buf所指向的内存空间。size
                为buf空间大小
      返回值:成功返回buf的值,失败返回NULL,错误代码存于errno中
九进程相关函数
   1 abort
      头文件:stdlib.h
      函数原型:void abort(void)
      函数说明:引起进程异常终止,此时所有已打开的文件流会自动关闭,缓冲区里的数据也会自动写回
      返回值:无
   2 assert
     头文件:assert.h
     函数原型:void assert (int expression)
     函数说明:判断expression是否成立。不成立则会显示错误,并调用abort来终止进程
     返回值:无
   3 exit
     头文件:stdlib.h
     函数原型:void exit(int status)
     函数说明:正常终止目前进程的执行,并把参数staus返回给父进程。进程中所有缓冲区的数据会自动回
                写,并关闭所有文件
     返回值:无
   4 _exit
     头文件:unistd.h
     函数原型:void _exit(int status)
     函数说明:立即终止目前进程的执行,并把参数staus返回给父进程。但不会处理缓冲区的数据
     返回值:无
   5 fork
     头文件:unistd.h
     函数原型:pid_t fork(void)
     函数说明:创建一个子进程,该子进程会复制父进程的数据和堆栈空间,并继承父进程的用户代
              码、组代码、环境变量、已打开的文件等,子进程父进程运行顺序不确定
     返回值:若成功,在父进程中返回新建子进程的进程号,子进程中返回0;失败返回-1  
   6 vfork
     头文件:vfork
     函数原型 pid_t fork(void);
     函数说明:创建子进程,父子进程共享数据段 ,保证子进程先运行,在她调用exec或exit之后父进程才可
               能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁
    返回值:若成功,在父进程中返回新建子进程的进程号,子进程中返回0;失败返回-1
   7 getpid
     头文件:unistd.h
     函数原型:pid_t getpid(void)
     函数说明:取得当前进程的进程号
     返回值:当前进程的进程号
   8 getppid
     头文件:unistd.h
     函数原型:pid_t getppid()
     函数说明:取得当前进程的父进程号
     返回值:当前进程的父进程号
   9 system
     头文件:stdlib.h
     函数原型:int system(const char *string)
     函数说明:调用fork()创建子进程,由子进程来执行/bin/sh-c string代表的命令,在调用system()期
               间 SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
    返回值: 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指
             针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,
           是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno
            来确认执行成功。
   10 wait
     头文件:sys/type.h
             sys/wait.h
     函数原型:pid_t wait(int *status)
     函数说明:暂停当前进程的执行,直到有信号来或子进程结束。如果在调用wait时子进程已经结束,则会
               立刻返回。子进程的结束状态由status来指定,不关心则设为NULL
     返回值:结束的子进程的进程号,错误返回-1,失败原因存于errno
   11 waitpid
      头文件:sys/type.h
              sys/wait.h
       函数原型:pid_t waitpid(pid_t pid,int *status,int options)
       函数说明:waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程 结束。如果在调用 waitpid
                ()时子进程已经结束,则 waitpid()会立即 返回子进程结束状态值。 子进程的结束状态值会
                由参数 status 返回, 而子进程的进程识别码也会一起返回。如果不在意结束状态值,则 参
                数 status 可以设成 NULL。
                pid含义:
                  pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。                pid=-1 等待任何子进程,相当于 wait()。                pid=0 等待进程组识别码与目前进程相同的任何子进程。                pid>0 等待任何子进程识别码为 pid 的子进程。
                options含义:
                  0阻塞父进程,等待子进程退出
                  WNOHANG 如果没有任何已经结束的子进程则马上返回, 不予以等待。
                WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
    返回值:
            1. 当正常返回的时候,waitpid返回收集到的子进程的进程ID;
            2. 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
            3. 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;
               当pid所指示的子进程不存在,或此进程存在,但不是调用进程的子进程,waitpid就会出错返
               回,这时errno被设置为ECHILD;
以下为exec函数族6个成员函数的语法,头文件均为unistd.h,出错时返回-1
        int execl(const char *path,const char *arg...)
        int execv(const char *path,char *const arge[])
        int execle(const char *path,const char *arg,...,char *const envp[])
        int execve(const char *path,char *const  argv[],char *const envp[])
        int execlp(const char *file,const char *arg,...)
        int execvp(const char *file,char *const  argv[])
这六个函数在函数名和使用语法上有细微的区别,下面就可执行文件查找方式,参数表传递方式及环境变量这几个方面进行比较:
    1查找方式:前四个函数的查找方式都是完整的文件目录路径,而最后两个函数(以p结尾)可以只给出文件
               名,系统会自动到SPATH所指定的路径中去找
    2参数传递方式:exec函数族参数传递有两种方式,一种是逐个列举,另一种是将所有参数整体构造指针数
                   组传递,这里以函数的第5个字母区分为l(list)的表示逐个列举参数的方式,语法为
                   const char *arg;v(vertor)表示将所有参数整体构造指针数组传递,语法为:char
                   *const argv[].
                   注意:这些参数必须以NULL结束
    3环境变量:exec函数族可以默认系统的环境变量,也可以传入指定的环境变量,以e(environment)结尾
               的函数就可以在envp中指定当前进程所使用的环境变量
事实上这六个函数中真正的系统调用只有execve()。其他5个都为库函数最终都会调用execve(),。使exec函数族时,一定要加上错误判断语句,exec很容易执行失败,最常见原因如下:
    a:找不到文件或路径,此时errno被设置为ENOENT
    b:数组argv和arvp忘记用NULL结束,此时errno被设置为EFAULT
    c:没有对应可执行文件的运行权限,此时errno被设置为EACCES
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值