Sponsored Content
Top Forums Programming Control multiple program instances - open multiple files problem Post 302494175 by Corona688 on Sunday 6th of February 2011 12:03:26 AM
Old 02-06-2011
Well, you'll need a way to communicate with the original process when an extra one is run, so it can check if it's first and if not, just send a message to the first and quit.

Message queues might work. They're convenient in having a property that their names are global across the system.

Have the process try to create a message queue with mq_open("/username_myapp", O_RDONLY|O_CREAT, 0600, NULL). If it succeeds in creating the message queue, it knows it's the first one, and sets up a thread to receive messages on it with mq_receive() until the program quits. (Or you could use it in nonblocking mode and poll it.) Make sure to destroy the message queue with mq_unlink when you quit, or it will continue to exist even after all your programs have quit!

If it fails to create it on the other hand, just have it open it with mq_open("/username_myapp", O_WRONLY), send a message over it, and quit.
This User Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

multiple instances of syslogd - is it possible?

I would like to start up multiple instances of syslog daemon. I am having a little difficulty. Is this at all possible? I have separate syslog.conf1.... syslog.conf5 files. I have linked the daemon to separate files syslogd1 ... syslogd5 I have arranged the rcd.2 start/stop scripts for... (9 Replies)
Discussion started by: Gary Dunn
9 Replies

2. UNIX for Dummies Questions & Answers

Multiple file instances

I am capturing text based reports with a specific program, which works no problem. However, since I send report warehouse output as they are migrated from the database software, on occasion when two capture process' initiate simultaneously, the capture file locks up. Is there a way to setup (in... (1 Reply)
Discussion started by: gozer13
1 Replies

3. Shell Programming and Scripting

detecting multiple instances

Hi Gurus I have a requirement like this. i use solaris OS.. if there are 2 instances of the same ksh file running in the directory, i need to kill the ksh file that started to run latest. suppose ragha.ksh starts running thru cron in abc/xyz directory now ragha.ksh started running by any... (3 Replies)
Discussion started by: ragha81
3 Replies

4. Shell Programming and Scripting

kill multiple instances of the same program

Hi, I know that the answer to this is very simple, since I saw somebody do it some time back..but I forgot how. The problem is, I have multiple instances of the same program running simultaneously and I want to kill them all in a single command. I know that it can be done using awk '{print... (12 Replies)
Discussion started by: ipzig
12 Replies

5. Shell Programming and Scripting

problem accessing Multiple Variables from C Program to a Shell script

program name--test #!/bin/bash output1=`/home/user/a.c` output2=`/home/user/a.c` k=`$output1 + 1` m=`$output2 + 1` echo $k echo $m --------------------------------------------------------------------------- prgram name--a.c #include<stdio.h> int main() (1 Reply)
Discussion started by: sameworld1980
1 Replies

6. Shell Programming and Scripting

Multiple instances of a job.

Could you please let me know how to create/make a multiple instances of a job/process in ksh(shell scripting). i.e., at present the parent script is calling another child/dependent script for only once. What we want is, the parent script itself has to execute multiple times, and in each one it... (1 Reply)
Discussion started by: Gangegowda
1 Replies

7. Shell Programming and Scripting

Perl, open multiple files with wildcards

I have a question regarding Perl scripting. If I want to say open files that all look like this and assign them to a filehandle and then assign the filehandle to a variable, how do I do this? The file names are strand1.fa.gz.tmp strand2.fa.gz.tmp strand3.fa.gz.tmp strand4.fa.gz.tmp ...... (6 Replies)
Discussion started by: japaneseguitars
6 Replies

8. Programming

Multiple instances of pthread

Suppose I declare pthread_t clear_thread; and then pthread_create(&clear_thread, &detach, clear_message, this); the thread is supposed to go away, perform the service it is intended to procide, and then kill itself. A little while later, I require this service again, so I say ... (2 Replies)
Discussion started by: clerew
2 Replies

9. Shell Programming and Scripting

open files with multiple indexes

Hi, I want to work with multiple files which all contain 2 numbers. I tried to make a nested for loop but for some reason it doesn't recognize the $j as a number. The output is cannot open file `175-T-pvalue.xls'. How do I make sure that it takes the numbers from the inner loop as $j? ... (4 Replies)
Discussion started by: linseyr
4 Replies

10. UNIX for Advanced & Expert Users

Pass Multiple Commands and Open Multiple Xterms via PSS

Hello, I'm attempting to open multiple xterms and run a command as an SAP user via sudo using PSSH. So far, I'm able to run PSSH to a file of servers with no check for keys, open every xterm in to the servers in the file list, and SUDO to the SAP(ADM) user, but it won't do anything else... (11 Replies)
Discussion started by: icemanj
11 Replies
mq_open(3C)						   Standard C Library Functions 					       mq_open(3C)

NAME
mq_open - open a message queue SYNOPSIS
#include <mqueue.h> mqd_t mq_open(const char *name, int oflag, /* unsigned long mode, mq_attr attr */ ...); DESCRIPTION
The mq_open() function establishes the connection between a process and a message queue with a message queue descriptor. It creates a open message queue description that refers to the message queue, and a message queue descriptor that refers to that open message queue descrip- tion. The message queue descriptor is used by other functions to refer to that message queue. The name argument points to a string naming a message queue. The name argument must conform to the construction rules for a path-name. If name is not the name of an existing message queue and its creation is not requested, mq_open() fails and returns an error. The first char- acter of name must be a slash (/) character and the remaining characters of name cannot include any slash characters. For maximum portability, name should include no more than 14 characters, but this limit is not enforced. The oflag argument requests the desired receive and/or send access to the message queue. The requested access permission to receive mes- sages or send messages is granted if the calling process would be granted read or write access, respectively, to a file with the equivalent permissions. The value of oflag is the bitwise inclusive OR of values from the following list. Applications must specify exactly one of the first three values (access modes) below in the value of oflag: O_RDONLY Open the message queue for receiving messages. The process can use the returned message queue descriptor with mq_receive(3C), but not mq_send(3C). A message queue may be open multiple times in the same or different processes for receiving messages. O_WRONLY Open the queue for sending messages. The process can use the returned message queue descriptor with mq_send(3C) but not mq_receive(3C). A message queue may be open multiple times in the same or different processes for sending messages. O_RDWR Open the queue for both receiving and sending messages. The process can use any of the functions allowed for O_RDONLY and O_WRONLY. A message queue may be open multiple times in the same or different processes for sending messages. Any combination of the remaining flags may additionally be specified in the value of oflag: O_CREAT This option is used to create a message queue, and it requires two additional arguments: mode, which is of type mode_t, and attr, which is pointer to a mq_attr structure. If the pathname, name, has already been used to create a message queue that still exists, then this flag has no effect, except as noted under O_EXCL (see below). Otherwise, a message queue is created without any messages in it. The user ID of the message queue is set to the effective user ID of process, and the group ID of the message queue is set to the effective group ID of the process. The file permission bits are set to the value of mode, and modified by clearing all bits set in the file mode creation mask of the process (see umask(2)). If attr is non-NULL and the calling process has the appropriate privilege on name, the message queue mq_maxmsg and mq_msg- size attributes are set to the values of the corresponding members in the mq_attr structure referred to by attr. If attr is non-NULL, but the calling process does not have the appropriate privilege on name, the mq_open() function fails and returns an error without creating the message queue. O_EXCL If both O_EXCL and O_CREAT are set, mq_open() will fail if the message queue name exists. The check for the existence of the message queue and the creation of the message queue if it does not exist are atomic with respect to other processes execut- ing mq_open() naming the same name with both O_EXCL and O_CREAT set. If O_EXCL and O_CREAT are not set, the result is unde- fined. O_NONBLOCK The setting of this flag is associated with the open message queue description and determines whether a mq_send(3C) or mq_receive(3C) waits for resources or messages that are not currently available, or fails with errno set to EAGAIN. See mq_send(3C) and mq_receive(3C) for details. RETURN VALUES
Upon successful completion, mq_open() returns a message queue descriptor; otherwise the function returns (mqd_t)-1 and sets errno to indi- cate the error condition. ERRORS
The mq_open() function will fail if: EACCES The message queue exists and the permissions specified by oflag are denied, or the message queue does not exist and per- mission to create the message queue is denied. EEXIST O_CREAT and O_EXCL are set and the named message queue already exists. EINTR The mq_open() operation was interrupted by a signal. EINVAL The mq_open() operation is not supported for the given name, or O_CREAT was specified in oflag, the value of attr is not NULL, and either mq_maxmsg or mq_msgsize was less than or equal to zero. EMFILE The number of open message queue descriptors in this process exceeds MQ_OPEN_MAX, of the number of open file descriptors in this process exceeds OPEN_MAX. ENAMETOOLONG The length of the name string exceeds PATH_MAX, or a pathname component is longer than NAME_MAX while _POSIX_NO_TRUNC is in effect. ENFILE Too many message queues are currently open in the system. ENOENT O_CREAT is not set and the named message queue does not exist. ENOSPC There is insufficient space for the creation of the new message queue. ENOSYS The mq_open() function is not supported by the system. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ |ATTRIBUTE TYPE |ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Committed | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+ |Standard |See standards(5). | +-----------------------------+-----------------------------+ SEE ALSO
exec(2), exit(2), umask(2), sysconf(3C), mqueue.h(3HEAD), mq_close(3C), mq_receive(3C), mq_send(3C), mq_setattr(3C), mq_unlink(3C), attributes(5), standards(5) NOTES
Due to the manner in which message queues are implemented, they should not be considered secure and should not be used in security-sensi- tive applications. Solaris 2.6 was the first release to support the Asynchronous Input and Output option. Prior to this release, this function always returned -1 and set errno to ENOSYS. SunOS 5.11 5 Feb 2008 mq_open(3C)
All times are GMT -4. The time now is 01:25 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy