Mailinglist Archive: opensuse-programming (13 mails)

< Previous Next >
[opensuse-programming] New C only example files that open on channel for reading and writing. Now I want to get two open. This is for openSUSE 11.4, 12.1 and SLES.
Hi attached are two files that I am using to get one channel open. Now I need a second. I hate that I can not seem to remember enough C to do it.

Any assistence would be greatly appreciated.

Thanks in advance.

--
Boyd Gerber <gerberb@xxxxxxxxx> 801 849-0213
ZENEZ 1042 East Fort Union #135, Midvale Utah 84047/* sysV IPC message passing - receiver

recvmsg_sysV.c



meant to work with sendmsg_sysV:

start recvmsg_sysV in background,

then start sendmsg_sysV

*/



#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>



struct my_msg_st {

long int my_msg_type;

char some_text[BUFSIZ];

};



int main() {

int run = 1;

struct my_msg_st some_data;

int msqid;

long int msg_to_recv = 1;



msqid = msgget( (key_t)1234, 0666 | IPC_CREAT);

if (msqid == -1) {

perror("msgget in recvmsg_sysV failed");

exit(EXIT_FAILURE);

}



while (run) {

if (msgrcv(msqid, &some_data, BUFSIZ, msg_to_recv, 0) == -1) {

perror("msgrcv in recvmsg_sysV failed");

exit(EXIT_FAILURE);

}

printf("You wrote: %s", some_data.some_text);

if (strncmp(some_data.some_text, "end", 3) == 0) {

run = 0;

}

}



if (msgctl(msqid, IPC_RMID, 0) == -1) {

perror("msgctl in recvmsg_sysV failed");

exit(EXIT_FAILURE);

}



exit(EXIT_SUCCESS);

}

/* sysV IPC message passing - sender

sendmsg_sysV.c



meant to work with recvmsg_sysV:

start rcvmesg_sysV in background,

then start sendmsg_sysV

*/



#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>



#define BUF 1024



struct my_msg_st {

long int my_msg_type;

char some_text[BUFSIZ];

};



int main() {

int run = 1;

struct my_msg_st some_data;

int msqid;

char buffer[BUF];



msqid = msgget( (key_t)1234, 0666 | IPC_CREAT);

if (msqid == -1) {

perror("msgget in sendmsg_sysV failed");

exit(EXIT_FAILURE);

}



while (run) {

printf("Enter some text:");

fgets(buffer, BUF, stdin);

some_data.my_msg_type = 1;

strcpy(some_data.some_text, buffer);



if (msgsnd(msqid, &some_data, BUF, 0) == -1) {

perror("msgsnd in sendmsg_sysV failed");

exit(EXIT_FAILURE);

}



if (strncmp(buffer, "end", 3) == 0) {

run = 0;

}

}



exit(EXIT_SUCCESS);

}

< Previous Next >
List Navigation
Follow Ups