/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jtux_UPosixIPC */

#ifndef _Included_jtux_UPosixIPC
#define _Included_jtux_UPosixIPC
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jtux_UPosixIPC
 * Method:    mmap
 * Signature: (JIIIIJ)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UPosixIPC_mmap
  (JNIEnv *, jclass, jlong, jint, jint, jint, jint, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_close
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1close
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_getattr
 * Signature: (JLjtux/UPosixIPC$s_mq_attr;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1getattr
  (JNIEnv *, jclass, jlong, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_notify
 * Signature: (JLjtux/UProcess$s_sigevent;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1notify
  (JNIEnv *, jclass, jlong, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_open
 * Signature: (Ljava/lang/String;I)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UPosixIPC_mq_1open__Ljava_lang_String_2I
  (JNIEnv *, jclass, jstring, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_open
 * Signature: (Ljava/lang/String;IILjtux/UPosixIPC$s_mq_attr;)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UPosixIPC_mq_1open__Ljava_lang_String_2IILjtux_UPosixIPC_00024s_1mq_1attr_2
  (JNIEnv *, jclass, jstring, jint, jint, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_receive
 * Signature: (J[BILjtux/UUtil$IntHolder;)I
 */
JNIEXPORT jint JNICALL Java_jtux_UPosixIPC_mq_1receive
  (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_send
 * Signature: (J[BII)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1send
  (JNIEnv *, jclass, jlong, jbyteArray, jint, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_setattr
 * Signature: (JLjtux/UPosixIPC$s_mq_attr;Ljtux/UPosixIPC$s_mq_attr;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1setattr
  (JNIEnv *, jclass, jlong, jobject, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_timedreceive
 * Signature: (J[BILjtux/UUtil$IntHolder;Ljtux/UProcess$s_timespec;)I
 */
JNIEXPORT jint JNICALL Java_jtux_UPosixIPC_mq_1timedreceive
  (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_timedsend
 * Signature: (J[BIILjtux/UProcess$s_timespec;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1timedsend
  (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    mq_unlink
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_mq_1unlink
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UPosixIPC
 * Method:    munmap
 * Signature: (JI)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_munmap
  (JNIEnv *, jclass, jlong, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_close
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1close
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_destroy
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1destroy
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_getvalue
 * Signature: (JLjtux/UUtil$IntHolder;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1getvalue
  (JNIEnv *, jclass, jlong, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_init
 * Signature: (JII)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1init
  (JNIEnv *, jclass, jlong, jint, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_open
 * Signature: (Ljava/lang/String;I)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UPosixIPC_sem_1open__Ljava_lang_String_2I
  (JNIEnv *, jclass, jstring, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_open
 * Signature: (Ljava/lang/String;III)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UPosixIPC_sem_1open__Ljava_lang_String_2III
  (JNIEnv *, jclass, jstring, jint, jint, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_post
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1post
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_timedwait
 * Signature: (JLjtux/UProcess$s_timespec;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1timedwait
  (JNIEnv *, jclass, jlong, jobject);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_trywait
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1trywait
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_unlink
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1unlink
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UPosixIPC
 * Method:    sem_wait
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_sem_1wait
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UPosixIPC
 * Method:    shm_open
 * Signature: (Ljava/lang/String;II)I
 */
JNIEXPORT jint JNICALL Java_jtux_UPosixIPC_shm_1open
  (JNIEnv *, jclass, jstring, jint, jint);

/*
 * Class:     jtux_UPosixIPC
 * Method:    shm_unlink
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UPosixIPC_shm_1unlink
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif
