pthread_create は UNIX 環境のスレッド作成関数です
特定の形式:
#include
int pthread_create ( pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void*(*start_rtn)(void*),void *restrict arg); 戻り値: 成功した場合は 0 を返し、それ以外の場合はエラー番号を返します
正常に戻ると、tidp が指すメモリユニットは、新しく作成されたスレッドのスレッド ID に設定されます。 attr パラメータは、さまざまなスレッド属性を指定するために使用されます。新しく作成されたスレッドは、start_rtn 関数のアドレスから実行を開始します。この関数には、ポインターなしパラメーター arg が 1 つだけあります。複数のパラメーターを start_rtn 関数に渡す必要がある場合は、これらのパラメーターを構造体に入れる必要があります。この構造体のアドレスは、パラメータ arg として渡されます。 C を使用して Linux でマルチスレッド プログラムを開発します。 Linux システムでのマルチスレッドは、pthread と呼ばれる POSIX スレッド インターフェイスに従います。
#include
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);
戻り値: OK の場合は 0、失敗した場合はエラー番号
restrict によって変更されたポインターは、ポインターが指すオブジェクトに最初にアクセスする唯一の方法です。オブジェクトには、ポインターが最初のオブジェクトに基づいている場合にのみアクセスできます。オブジェクトへのアクセスは、restrict によって変更されたポインター式に制限されます。 制限によって変更されたポインタは、主に関数パラメータに使用されるか、malloc() によって割り当てられたメモリ空間を指します。データ型を制限しても、プログラムのセマンティクスは変わりません。 コンパイラーは、オブジェクトにアクセスする唯一の方法は制限付き変更されたポインターであると想定することで、特定のタイプのルーチンをより適切に最適化できます。
最初のパラメータはスレッド識別子へのポインタです。
2 番目のパラメータは、スレッド属性を設定するために使用されます。
3 番目のパラメータは、関数を実行するスレッドの開始アドレスです。
最後のパラメータは関数を実行するためのパラメータです。
さらに、静的リンク ライブラリを呼び出すためにコンパイルするときに -lpthread パラメーターを追加することに注意してください。 pthread は Linux システムのデフォルトのライブラリではないため
================================== ==== ==========================================linuxAbout
Readlink 関数 実行パスの取得 関連関数:
STAT、LSMLINK Speed ヘッド ファイル:
#include & lt ; unistd.h & gt; 関数の定義:
int readlink(const char *path, char *buf, size_t bufsiz);関数の説明:
readlink()パラメータのパスをシンボリックに接続します。内容はパラメータ buf が指すメモリ空間に転送されます。返された内容は文字列として NULL で終了せず、文字列内の文字数が返されます。パラメータ bufsiz がシンボリック リンクのコンテンツ長より短い場合、長すぎるコンテンツは切り詰められます。
戻り値: 実行が成功した場合、 が指すファイル パス文字列が返されます。シンボリックリンクが渡されます。失敗した場合は、-1 が返されます。エラーコードは errno
エラーコード:
EACCESS EACCESS ファイルの取得が拒否されました。権限が不足しています
EINVALパラメータ bufsiz が負の数です
EIO EIO アクセス エラー
ELOOP 開こうとしているファイルには履歴があります マルチシンボル接続の問題
ENAMETOOLONG パラメータ path のパス名が長すぎます
ENOENTパラメータ path で指定されたファイルが存在しません
ENOMEM コアメモリが不十分です
ENOTDIR path パラメータのディレクトリは存在しますが、実際のディレクトリではありません Directory
例 1:
#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_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 プロセス識別コードの取得
関連関数: fork, kill, getpid ヘッダーファイル: # include
関数の説明:
getpid() は、現在のプロセスのプロセス識別コードを取得するために使用され、これによって引き起こされる問題を回避するために、この値を使用します。同じ一時ファイル。
戻り値: 現在のプロセスのプロセス識別コード
例:
#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 char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
C関数数原型:
char * strstr ( const char *, const char * );
a字符串里查看有無b字符串,
有则从首次
何も出力されません null
例:
char st[]="abc 1234 xyz";
printf("%s ",strstr(st,"34") );
打印:
34xyz