基于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ò)編號(hào)
返回成功時(shí),由tidp指向的內(nèi)存單元被設(shè)置為新創(chuàng)建線程的線程ID。attr參數(shù)用于制定各種不同的線程屬性。新創(chuàng)建的線程從start_rtn函數(shù)的地址開(kāi)始運(yùn)行,該函數(shù)只有一個(gè)無(wú)指針參數(shù)arg,如果需要向start_rtn函數(shù)傳遞的參數(shù)不止一個(gè),那么需要把這些參數(shù)放到一個(gè)結(jié)構(gòu)中,然后把這個(gè)結(jié)構(gòu)的地址作為arg的參數(shù)傳入。
linux下用C開(kāi)發(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 修飾的指針是最初唯一對(duì)指針?biāo)赶虻膶?duì)象進(jìn)行存取的方法,僅當(dāng)?shù)诙€(gè)指針基于第一個(gè)時(shí),才能對(duì)對(duì)象進(jìn)行存取。對(duì)對(duì)象的存取都限定于基于由 restrict 修飾的指針表達(dá)式中。 由 restrict 修飾的指針主要用于函數(shù)形參,或指向由 malloc() 分配的內(nèi)存空間。restrict 數(shù)據(jù)類型不改變程序的語(yǔ)義。 編譯器能通過(guò)作出 restrict 修飾的指針是存取對(duì)象的唯一方法的假設(shè),更好地優(yōu)化某些類型的例程。
第一個(gè)參數(shù)為指向線程標(biāo)識(shí)符的指針。
第二個(gè)參數(shù)用來(lái)設(shè)置線程屬性。
第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址。
最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。
另外,在編譯時(shí)注意加上-lpthread參數(shù),以調(diào)用靜態(tài)鏈接庫(kù)。因?yàn)閜thread并非Linux系統(tǒng)的默認(rèn)庫(kù)
===============================================================================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ù)說(shuō)明:readlink()會(huì)將參數(shù)path的符號(hào)連接內(nèi)容到參數(shù)buf所指的內(nèi)存空間,返回的內(nèi)容不是以NULL作字符串結(jié)尾,但會(huì)將字符串的字符數(shù)返回。若參數(shù)bufsiz小于符號(hào)連接的內(nèi)容長(zhǎng)度,過(guò)長(zhǎng)的內(nèi)容會(huì)被截?cái)?BR>
返回值:執(zhí)行成功則傳符號(hào)連接所指的文件路徑字符串,失敗返回-1, 錯(cuò)誤代碼存于errno
錯(cuò)誤代碼:
EACCESS 取文件時(shí)被拒絕,權(quán)限不夠
EINVAL 參數(shù)bufsiz為負(fù)數(shù)
EIO O存取錯(cuò)誤
ELOOP 欲打開(kāi)的文件有過(guò)多符號(hào)連接問(wèn)題
ENAMETOOLONG 參數(shù)path的路徑名稱太長(zhǎng)
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)程識(shí)別碼
相關(guān)函數(shù): fork,kill,getpid 表頭文件: #include<unistd.h>
定義函數(shù): pid_t getpid(void);
函數(shù)說(shuō)明:
getpid()用來(lái)取得目前進(jìn)程的進(jìn)程識(shí)別碼,許多程序利用取到的 此值來(lái)建立臨時(shí)文件,以避免臨時(shí)文件相同帶來(lái)的問(wèn)題?! ?br>
返回值: 目前進(jìn)程的進(jìn)程識(shí)別碼
范例:
#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。
語(yǔ)法
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字符串。
沒(méi)有則輸出 null
例子:
char st[]="abc 1234 xyz";
printf("%s",strstr(st,"34") );
打印出:
34 xyz
相關(guān)文章
jQuery實(shí)現(xiàn)瀑布流布局詳解(PC和移動(dòng)端)
這篇文章非常全面的介紹了在PC和移動(dòng)端上jQuery實(shí)現(xiàn)瀑布流布局的詳細(xì)過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,對(duì)瀑布流布局感興趣的小伙伴們可以參考一下2015-10-10
基于jQuery的Spin Button自定義文本框數(shù)值自增或自減
這個(gè)jquery 插件可以讓你的文本框增加一個(gè)自增或自減的小按鈕,方便輸入數(shù)值的控制。2010-07-07
jquery 圖片截取工具jquery.imagecropper.js
工作需要參考網(wǎng)上的一些代碼做了個(gè)圖片截取工具,最后干脆封裝成一個(gè)jquery的插件。2010-04-04
jQuery控制cookie過(guò)期時(shí)間的方法
這篇文章主要介紹了jQuery控制cookie過(guò)期時(shí)間的方法,涉及jQuery操作cookie的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
jQuery實(shí)現(xiàn)ctrl+enter(回車)提交表單
本文章來(lái)給大家介紹在我們輸入完內(nèi)容之后直接按Ctrl+Enter提交表單實(shí)現(xiàn)程序,此方法一般是用于textarea中哦,其它的input這類的就不需了。2015-10-10
一個(gè)JQuery寫的點(diǎn)擊上下滾動(dòng)的小例子
分享一個(gè)JQuery寫的點(diǎn)擊上下滾動(dòng)的小例子,學(xué)習(xí)jquery的朋友可以參考下。2011-08-08
jQuery實(shí)現(xiàn)購(gòu)物車全功能
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)購(gòu)物車全功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01

