基于pthread_create,readlink,getpid等函數(shù)的學(xué)習(xí)與總結(jié)
pthread_create是UNIX環(huán)境創(chuàng)建線程函數(shù)
具體格式:
#include<pthread.h>
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void*(*start_rtn)(void*),void *restrict arg);
返回值:若成功則返回0,否則返回出錯(cuò)編號
返回成功時(shí),由tidp指向的內(nèi)存單元被設(shè)置為新創(chuàng)建線程的線程ID。attr參數(shù)用于制定各種不同的線程屬性。新創(chuàng)建的線程從start_rtn函數(shù)的地址開始運(yùn)行,該函數(shù)只有一個(gè)無指針參數(shù)arg,如果需要向start_rtn函數(shù)傳遞的參數(shù)不止一個(gè),那么需要把這些參數(shù)放到一個(gè)結(jié)構(gòu)中,然后把這個(gè)結(jié)構(gòu)的地址作為arg的參數(shù)傳入。
linux下用C開發(fā)多線程程序,Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);
Returns: 0 if OK, error number on failure
由 restrict 修飾的指針是最初唯一對指針?biāo)赶虻膶ο筮M(jìn)行存取的方法,僅當(dāng)?shù)诙€(gè)指針基于第一個(gè)時(shí),才能對對象進(jìn)行存取。對對象的存取都限定于基于由 restrict 修飾的指針表達(dá)式中。 由 restrict 修飾的指針主要用于函數(shù)形參,或指向由 malloc() 分配的內(nèi)存空間。restrict 數(shù)據(jù)類型不改變程序的語義。 編譯器能通過作出 restrict 修飾的指針是存取對象的唯一方法的假設(shè),更好地優(yōu)化某些類型的例程。
第一個(gè)參數(shù)為指向線程標(biāo)識符的指針。
第二個(gè)參數(shù)用來設(shè)置線程屬性。
第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址。
最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。
另外,在編譯時(shí)注意加上-lpthread參數(shù),以調(diào)用靜態(tài)鏈接庫。因?yàn)閜thread并非Linux系統(tǒng)的默認(rèn)庫
===============================================================================linux關(guān)于readlink函數(shù)獲取運(yùn)行路徑
相關(guān)函數(shù): stat, lstat, symlink
表頭文件: #include <unistd.h>
定義函數(shù):int readlink(const char *path, char *buf, size_t bufsiz);
函數(shù)說明:readlink()會將參數(shù)path的符號連接內(nèi)容到參數(shù)buf所指的內(nèi)存空間,返回的內(nèi)容不是以NULL作字符串結(jié)尾,但會將字符串的字符數(shù)返回。若參數(shù)bufsiz小于符號連接的內(nèi)容長度,過長的內(nèi)容會被截?cái)?BR>
返回值:執(zhí)行成功則傳符號連接所指的文件路徑字符串,失敗返回-1, 錯(cuò)誤代碼存于errno
錯(cuò)誤代碼:
EACCESS 取文件時(shí)被拒絕,權(quán)限不夠
EINVAL 參數(shù)bufsiz為負(fù)數(shù)
EIO O存取錯(cuò)誤
ELOOP 欲打開的文件有過多符號連接問題
ENAMETOOLONG 參數(shù)path的路徑名稱太長
ENOENT 參數(shù)path所指定的文件不存在
ENOMEM 核心內(nèi)存不足
ENOTDIR 參數(shù)path路徑中的目錄存在但卻非真正的目錄
例一:
#include <stdio.h>
#include <unistd.h>
#define PATH_MAX 1024
char * get_exe_path()
{
static char buf[PATH_MAX];
int i;
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if (rslt < 0 || rslt >= PATH_MAX)
{
return NULL;
}
buf[rslt] = '/0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c/n", i, buf);
if (buf == '/')
{
buf[i + 1] = '/0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
printf("%s/n", get_exe_path());
return 0;
}
===============================================================================
getpid 取得進(jìn)程識別碼
相關(guān)函數(shù): fork,kill,getpid 表頭文件: #include<unistd.h>
定義函數(shù): pid_t getpid(void);
函數(shù)說明:
getpid()用來取得目前進(jìn)程的進(jìn)程識別碼,許多程序利用取到的 此值來建立臨時(shí)文件,以避免臨時(shí)文件相同帶來的問題?! ?br>
返回值: 目前進(jìn)程的進(jìn)程識別碼
范例:
#include<unistd.h>
main()
{
printf(“pid=%d/n”,getpid());
}
執(zhí)行:
pid=1494 /*每次執(zhí)行結(jié)果都不一定相同*/
===============================================================================
strrchr()函數(shù)
定義和用法
strrchr()函數(shù)的作用是:查找一個(gè)字符串在另一個(gè)字符串中末次出現(xiàn)的位置,并返回從字符串中的這個(gè)位置起, 一直到字符串結(jié)束的所有字符?! ∪绻茨苷业街付ㄗ址敲春瘮?shù)將返回NULL。
語法
char *strrchr(char *str, char c);
例子
#include <string.h>
#include <stdio.h>
int main(void)
char string[16];
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, ptr-string);
else
printf("The character was not found/n");
return 0;
}
運(yùn)行結(jié)果是:The character r is at position:12
===============================================================================
strstr()函數(shù)用法
c++函數(shù)原型:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
C函數(shù)原型:
char * strstr ( const char *, const char * );
a字符串里 查看是否有b字符串,
有則 從首次發(fā)現(xiàn)b字符串處 返回 a字符串。
沒有則輸出 null
例子:
char st[]="abc 1234 xyz";
printf("%s",strstr(st,"34") );
打印出:
34 xyz
相關(guān)文章
jQuery實(shí)現(xiàn)鼠標(biāo)滑過Div層背景變顏色的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)鼠標(biāo)滑過Div層背景變顏色的方法,涉及jQuery中hover及addClass方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02ztree實(shí)現(xiàn)權(quán)限橫向顯示功能
最近在做權(quán)限功能的時(shí)候,采用的ztree實(shí)現(xiàn)的,但是產(chǎn)品要求最后一層的權(quán)限節(jié)點(diǎn)要橫向顯示。下面小編把基于ztree實(shí)現(xiàn)權(quán)限橫向顯示功能的實(shí)現(xiàn)思路分享給大家,供大家參考2017-05-05jQuery實(shí)現(xiàn)用戶信息表格的添加和刪除功能
這篇文章主要介紹了jQuery實(shí)現(xiàn)用戶信息表格的添加和刪除功能,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-09-09jquery實(shí)現(xiàn)自適應(yīng)banner焦點(diǎn)圖
本文主要分享了jquery實(shí)現(xiàn)自適應(yīng)banner焦點(diǎn)圖的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02JQuery入門——用bind方法綁定事件處理函數(shù)應(yīng)用介紹
bind()功能是為每個(gè)選擇元素的事件綁定處理函數(shù),感興趣的你可以了解下它的語法bind(type, [data], fn),參數(shù)data是作為event.data屬性值傳遞對象的額外數(shù)據(jù)對象,好好學(xué)習(xí)希望本可以幫助到你2013-02-02