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

#ifndef _Included_jtux_USysVIPC
#define _Included_jtux_USysVIPC
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jtux_USysVIPC
 * Method:    ftok
 * Signature: (Ljava/lang/String;I)J
 */
JNIEXPORT jlong JNICALL Java_jtux_USysVIPC_ftok
  (JNIEnv *, jclass, jstring, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    msg_set_type
 * Signature: (J[B)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_msg_1set_1type
  (JNIEnv *, jclass, jlong, jbyteArray);

/*
 * Class:     jtux_USysVIPC
 * Method:    msgctl
 * Signature: (IILjtux/USysVIPC$s_msqid_ds;)V
 */
JNIEXPORT void JNICALL Java_jtux_USysVIPC_msgctl
  (JNIEnv *, jclass, jint, jint, jobject);

/*
 * Class:     jtux_USysVIPC
 * Method:    msgget
 * Signature: (JI)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_msgget
  (JNIEnv *, jclass, jlong, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    msgrcv
 * Signature: (I[BIJI)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_msgrcv
  (JNIEnv *, jclass, jint, jbyteArray, jint, jlong, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    msgsnd
 * Signature: (I[BII)V
 */
JNIEXPORT void JNICALL Java_jtux_USysVIPC_msgsnd
  (JNIEnv *, jclass, jint, jbyteArray, jint, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    semctl
 * Signature: (IIILjtux/USysVIPC$u_semun;)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_semctl
  (JNIEnv *, jclass, jint, jint, jint, jobject);

/*
 * Class:     jtux_USysVIPC
 * Method:    semget
 * Signature: (JII)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_semget
  (JNIEnv *, jclass, jlong, jint, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    semop
 * Signature: (I[Ljtux/USysVIPC$s_sembuf;I)V
 */
JNIEXPORT void JNICALL Java_jtux_USysVIPC_semop
  (JNIEnv *, jclass, jint, jobjectArray, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    shmat
 * Signature: (IJI)J
 */
JNIEXPORT jlong JNICALL Java_jtux_USysVIPC_shmat
  (JNIEnv *, jclass, jint, jlong, jint);

/*
 * Class:     jtux_USysVIPC
 * Method:    shmctl
 * Signature: (IILjtux/USysVIPC$s_shmid_ds;)V
 */
JNIEXPORT void JNICALL Java_jtux_USysVIPC_shmctl
  (JNIEnv *, jclass, jint, jint, jobject);

/*
 * Class:     jtux_USysVIPC
 * Method:    shmdt
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_USysVIPC_shmdt
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_USysVIPC
 * Method:    shmget
 * Signature: (JII)I
 */
JNIEXPORT jint JNICALL Java_jtux_USysVIPC_shmget
  (JNIEnv *, jclass, jlong, jint, jint);

#ifdef __cplusplus
}
#endif
#endif
