首頁  >  文章  >  web前端  >  基於pthread_create,readlink,getpid等函數的學習與總結_jquery

基於pthread_create,readlink,getpid等函數的學習與總結_jquery

WBOY
WBOY原創
2016-05-16 17:28:501122瀏覽

pthread_create是UNIX環境建立執行緒函數
  
  特定格式:
   『 pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void*(*start_rtn)(void*),void *restrict arg);
    回傳值:回傳成功則回傳值返回成功時,由tidp指向的記憶體單元被設定為新建立線程的線程ID。 attr參數用於制定各種不同的執行緒屬性。新建立的執行緒從start_rtn函數的位址開始運行,該函數只有一個無指標參數arg,如果需要向start_rtn函數傳遞的參數不只一個,那麼需要把這些參數放到一個結構中,然後把這個結構的位址當作arg的參數傳入。
    linux下用C開發多執行緒程序,Linux系統下的多執行緒遵循POSIX執行緒接口,稱為pthread。

 
#include
  int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void(*(tric); 🎜>
     Returns: 0 if OK, error number on failure

由restrict 修飾的指標是最初唯一對指標所指向的物件進行存取的方法,僅當第二個指標基於第一個時,才能對物件進行存取。對物件的存取都限定於基於由 restrict 修飾的指標表達式中。 由 restrict 修飾的指標主要用於函數形參,或指向由 malloc() 分配的記憶體空間。 restrict 資料類型不會改變程式的語意。 編譯器能透過作出 restrict 修飾的指標是存取物件的唯一方法的假設,以更好地最佳化某些類型的例程。
    第一個參數為指向執行緒標識符的指標。
    第二個參數用來設定執行緒屬性。
    第三個參數是執行緒運行函數的起始位址。
    最後一個參數是運作函數的參數。
    另外,在編譯時注意加上-lpthread參數,以呼叫靜態連結函式庫。因為pthread並非Linux系統的預設函式庫

  ==================================== ===========================================linux關於

readlink函數取得運行路徑

            相關函數: stat, lstat, symlink
表頭檔案:定義函數:
int  readlink(const  char *path,  char *buf, size_t  bufsiz);函數說明:
readlink()會將參數參數的符號連結內容到參數buf所指的記憶體空間,傳回的內容不是以NULL作字串結尾,但會將字串的字元數回傳。若參數bufsiz小於符號連接的內容長度,過長的內容會被截斷
  
回傳值:
執行成功則傳符號連接所指的檔案路徑字串,失敗回傳-1 , 錯誤代碼存於errno
錯誤代碼:
               EACCESS                  取文件時被拒絕,權限不夠
               EINVAL                    參數bufsiz為負數
               EIO                         O存取錯誤
               ELOOP                     欲打開的文件有過多符號連線問題
                      參數path所指定的檔案不存在
               ENOMEM             ENOTDIR                   參數path路徑中的目錄存在但非真正的目錄

例一:
#include
#include
#define PATH_MAX 1024
char * get_exe_path(){
    static char buf[PATH_MAX];
    int i;
    int rslt = readlink("/proc/self/exe", buf, PATH_MAXMAX);= PATH_MAX)
    {
        return NULL;
    }
    
    {
        printf("buf[%d] %c/n", i, buf);
              buf[i 1] = '/0';
            break;
        }
   } printf("%s/n", get_exe_path());
    return 0;
}

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


 
getpid 取得進程識別碼


  
 
相關函數:
  
 
相關函數:
forkkill ,getpid  表頭檔: #include  
 
定義函數:
pid_t getpid(void);說明:    getpid()用來取得目前流程的流程識別碼,許多程式利用所取到的此值來建立臨時文件,以避免臨時檔案相同所帶來的問題。  
回傳值:
目前進程的進程識別碼 
範例: 
 main #include )    {  
  printf(“pid=%d/n”,getpid());  
  } 
一定相同*/
  ======================================== =======================================
    


strrchr()函數


  
 
定義與用法
      字串中末次出現的位置,並傳回從字串中的這個位置起, 一直到字串結束的所有字元。  如果未能找到指定字符,那麼函數將傳回NULL。

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

  示例
  #include   
  #include ;  
  int main(void)
  char string[16];
  char *ptr, c = 'r';  strcpy(string, "這是字串");
  ptr = strrchr(string, c);

  if (ptr)
   printf("字元%c的位置為:%d/n", c, ptr-string);
else
   printf("找不到該字元/n");
  return 0;  
¿ >
  運作結果是:字元r 位於:12

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

 

strstr()函數最常使用
  
c 函數原型:

const *str str char * str1, const char * str2 );char * strstr ( char * str1, const char * str2 );

C 函數原型:

char * strstr ( const char *, const char * );a 字串裡是否有b 字串,
有則從第一個發現b字串處傳回a字串。
沒有則輸出null

範例:

char st[]="abc 1234 xyz";printf("%s ",strstr(st,"34") );
印出:
34 xyz

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn