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
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