熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

基於pthread

2022-06-13   來源: JSP教程 
以下是對pthread_createreadlinkgetpid等函數的用法進行了詳細的分析介紹需要的朋友可以參考下  

  pthread_create是UNIX環境創建線程函數
  
  具體格式
    #include<pthreadh>
    int pthread_create(pthread_t *restrict tidpconst pthread_attr_t *restrict attrvoid*(*start_rtn)(void*)void *restrict arg);
    返回值若成功則返回否則返回出錯編號
    返回成功時由tidp指向的內存單元被設置為新創建線程的線程IDattr參數用於制定各種不同的線程屬性新創建的線程從start_rtn函 數的地址開始運行該函數只有一個無指針參數arg如果需要向start_rtn函數傳遞的參數不止一個那麼需要把這些參數放到一個結構中然後把這 個結構的地址作為arg的參數傳入
    linux下用C開發多線程程序Linux系統下的多線程遵循POSIX線程接口稱為pthread

  #include <pthreadh>
  int pthread_create(pthread_t *restrict tidp const pthread_attr_t *restrict attr void *(*start_rtn)(void) void *restrict arg);
  
  Returns: if OK error number on failure

由 restrict 修飾的指針是最初唯一對指針所指向的對象進行存取的方法僅當第二個指針基於第一個時才能對對象進行存取對對象的存取都限定於基於由 restrict 修飾的指針表達式中 由 restrict 修飾的指針主要用於函數形參或指向由 malloc() 分配的內存空間restrict 數據類型不改變程序的語義 編譯器能通過作出 restrict 修飾的指針是存取對象的唯一方法的假設更好地優化某些類型的例程
    第一個參數為指向線程標識符的指針
    第二個參數用來設置線程屬性
    第三個參數是線程運行函數的起始地址
    最後一個參數是運行函數的參數
    另外在編譯時注意加上lpthread參數以調用靜態鏈接庫因為pthread並非Linux系統的默認庫

  ===============================================================================linux關於readlink函數獲取運行路徑           
相關函數 stat lstat symlink
表頭文件 #include <unistdh>
定義函數int  readlink(const  char *path  char *buf size_t  bufsiz);
函數說明readlink()會將參數path的符號連接內容到參數buf所指的內存空間返回的內容不是以NULL作字符串結尾但會將字符串的字符數返回若參數bufsiz小於符號連接的內容長度過長的內容會被截斷
  
返回值
執行成功則傳符號連接所指的文件路徑字符串失敗返回 錯誤代碼存於errno
錯誤代碼
               EACCESS                  取文件時被拒絕權限不夠
               EINVAL                    參數bufsiz為負數
               EIO                         O存取錯誤
               ELOOP                     欲打開的文件有過多符號連接問題
               ENAMETOOLONG       參數path的路徑名稱太長
               ENOENT                   參數path所指定的文件不存在
               ENOMEM                   核心內存不足
               ENOTDIR                   參數path路徑中的目錄存在但卻非真正的目錄
例一:
#include <stdioh>
#include <unistdh>
#define PATH_MAX
char * get_exe_path()
{
    static char buf[PATH_MAX];
    int i;
    int rslt = readlink("/proc/self/exe" buf PATH_MAX);
    if (rslt < || rslt >= PATH_MAX)
    {
        return NULL;
    }
    buf[rslt] = /;
    for (i = rslt; i >= ; i)
    {
        printf("buf[%d] %c/n" i buf);
        if (buf == /)
        {
            buf[i + ] = /;
            break;
        }
    }
    return buf;
}
int main(int argc char ** argv)
{
    printf("%s/n" get_exe_path());
    return ;
}

  ===============================================================================

  getpid 取得進程識別碼
  
  相關函數 forkkillgetpid  表頭文件 #include<unistdh>  

  定義函數 pid_t getpid(void);  

  函數說明  
  getpid()用來取得目前進程的進程識別碼許多程序利用取到的  此值來建立臨時文件以避免臨時文件相同帶來的問題  

  返回值 目前進程的進程識別碼  

  范例  
  #include<unistdh>  
  main()  
  {  
  printf(“pid=%d/n”getpid());  
  }  

  執行  
  pid= /*每次執行結果都不一定相同*/

  ===============================================================================
  
 
strrchr()函數
  
  定義和用法           
  strrchr()函數的作用是查找一個字符串在另一個字符串中末次出現的位置並返回從字符串中的這個位置起 一直到字符串結束的所有字符  如果未能找到指定字符那麼函數將返回NULL

  語法
  char *strrchr(char *str char c);

  例子
  #include <stringh>  
  #include <stdioh>  
  int main(void)  
    char string[];
    char *ptr c = r;

    strcpy(string "This is a string");
    ptr = strrchr(string c);

    if (ptr)
             printf("The character %c is at position: %d/n" c ptrstring);
    else
             printf("The character was not found/n");
    return ;  
  }  

  運行結果是The character r is at position

  ===============================================================================

  strstr()函數用法
  
c++函數原型
const char * strstr ( const char * str const char * str );
char * strstr ( char * str const char * str );

  C函數原型
char * strstr ( const char * const char * );
a字符串裡 查看是否有b字符串
有則 從首次發現b字符串處 返回 a字符串
沒有則輸出 null
例子:
char st[]="abc xyz";
printf("%s"strstr(st"") );

  打印出
xyz


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19821.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.