pthread_attr_setguardsize() - guardsize 属性の設定

標準

標準/拡張機能 C/C++ 依存項目

Single UNIX Specification、バージョン 3

両方

z/OS V1R9
POSIX(ON)

形式

#define _UNIX03_THREADS
#include <pthread.h>

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

機能説明

pthread_attr_setguardsize() は、guardsize の値を使用して attr の guardsize 属性を設定します。

attr は、pthread_attr_init() によって初期化された スレッド属性オブジェクトを指すポインターです。

この関数は、後続の pthread_attr_getguardsize() の呼び出しのスレッド属性オブジェクトの guardsize 属性を保管しますが、それ以上の処置はありません。guardsize 属性は、スレッドの作成中は無視されます。

注:

Single UNIX Specification、バージョン 3 は、少なくとも guardsize バイトの保護領域を想定しますが、guardsize の、システム値変数 PAGESIZE の倍数の方向への丸めを許可します。z/OS® UNIX のスタック管理は、31 ビット・アプリケーションの PAGESIZE、および AMODE64 の (PAGESIZE * PAGESIZE) バイトの保護領域を設定します。これらの値は、保護サイズ属性のデフォルトです。大容量の保護領域を要求すると EINVAL で失敗します。

ゼロの guardsize を要求すると、保護領域は提供されません。しかし、z/OS UNIX スタック管理では保護領域が必須です。そのため、 pthread_attr_setguardsize() が guardsize のゼロを許容しても、この要求 (ゼロの要求) は受け入れられません。

戻り値

正常に実行された場合、pthread_attr_setguardsize() はゼロを戻します。正常に実行されなかった場合、エラー番号を戻します。

エラー・コード
説明
EINVAL
パラメーター guardsize が無効か、または attr が指定した値が初期設定されたスレッド属性オブジェクトを指していません。

⁄* CELEBP66 *⁄                                   
⁄* Example using SUSv3 pthread_attr_setguardsize() interface *⁄ 

#define _XOPEN_SOURCE 600

#include <stdio.h>                                                              
#include <stdlib.h>
#include <pthread.h>                                                            
#include <limits.h>                                                            
#include <errno.h>                                                            
                                                                                
                                                                                
int main(void) 
{                                                                               
   pthread_attr_t attr;                                                         
   int            rc; 

   if (pthread_attr_init(&attr) == -1) {                                        
      perror("error in pthread_attr_init");                                     
      exit(1);                                                                  
   }                                                                            
                                                                                
   printf("Set guardsize to value of PAGESIZE.¥n");
   rc = pthread_attr_setguardsize(&attr, PAGESIZE);
   if (rc != 0) {                                           
      printf("pthread_attr_setguardsize returned: %d¥n", rc); 
      printf("Error: %d, Errno_Jr: %08x¥n", errno, __errno2());
      exit(2);                                                                  
   } else {
      printf("Set guardsize is %d¥n", PAGESIZE);
   }

   rc = pthread_attr_destroy(&attr);
   if (rc != 0) {                                     
      perror("error in pthread_attr_destroy");                                  
      exit(3);                                                                  
   }                                                                            

   exit(0);                                                                     
}                                                                               

関連情報