Visit Our UNIX and Linux User Community


Problem shmat in HP-UX. EINVAL Error


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Problem shmat in HP-UX. EINVAL Error
# 1  
Old 07-29-2009
Problem shmat in HP-UX. EINVAL Error

I have a process that need two active connections to the same zone of shared memory. But when i do the second call to shmat it give me error 22 (EINVAL). Only works ok the second call to shmat if i disconnect the first connection (shmdt)
In Sun,AIX and Digital, i donīt have this problem.

Steps: Iīm going to shared a integer.

1š.- Create shared memory. Work OK:
iIdentificador = shmget(5000,sizeof(int),IPC_CREAT | 0777); //5000 is the key.

2š.-Connection 1 and view the integer shared. Works OK:
piIntegerShared_1=(int *)shmat(iIdentificador,NULL,0))
printf("\n\t =>Dato compartido [%ld]\n",*piIntegerShared_1);


3š.-Connection 2: !!! shmat ERROR !!!:
if((piIntegerShared_2=(int *)shmat(iIdentificador,NULL,0))==(void*)-1)
printf("\n\n\t ERROR shmat memoria2 [%d] [%s]",errno,strerror(errno));

Output: ERROR shmat memoria2 [22] [Invalid argument]

The connection 2 only is ok, if we delete the connection 1 with:
shmdt(piIntegerShared_1);

Which is the problem?

Thanks,
David

Last edited by dairby; 07-30-2009 at 06:26 AM..
# 2  
Old 07-29-2009
The order of the arguments you gave to shmget is wrong...suggest you look at its man page.
# 3  
Old 07-30-2009
5000 is the key_t key, the order is ok.
# 4  
Old 07-30-2009
I dont hardcode the key but rely on the kernel giving me a unique value for it. That's why 5000 threw me off because I took it to be the segment size requested.
Try shmget(IPC_PRIVATE, sizeof(int), 0777) but if you want to hardcode shmid then try...
Code:
shmget(5000, sizeof(int), 0777 & IPC_CREAT);

# 5  
Old 07-30-2009
Donīt worry by the 5000 (key_t), in the original source is not hardcode, this is only the example of the problem.
I have tested your solution: shmget(5000, sizeof(int), 0777 & IPC_CREAT);
and give me error in Step 1: ERROR crear memoria [2] [No such file or directory].


Remember that the first connection (step 2) works correctly, the problem is the second one.

Last edited by dairby; 07-30-2009 at 12:07 PM..
# 6  
Old 08-03-2009
Resolved problem:

cc DemoIPC.c -o -N DemoIPC
DemoIPC
chatr +as mpas DemoIPC
# 7  
Old 08-03-2009
Why is there two thread going on at the same time, in two different forums, with the same topic by the same user?

Previous Thread | Next Thread
Test Your Knowledge in Computers #32
Difficulty: Easy
There are 9 pins in a basic serial port.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Syntax Error Problem

Hi Below script is throwing an error: repos=root filename=/home/admin/Desktop/authz case $repos in root) root_folder="\" do sed "/$root_folder/a $username = $access" $filename done ;; esac exit 0 Error: ./new1.sh: line 77: syntax error near unexpected token `do' (1 Reply)
Discussion started by: ankur328
1 Replies

2. Shell Programming and Scripting

IF section problem. syntax error: unexpected end of file error

Hello, I have another problem with my script. Please accept my apologies, but I am really nooby in sh scripts. I am writing it for first time. My script: returned=`tail -50 SapLogs.log | grep -i "Error"` echo $returned if ; then echo "There is no errors in the logs" fi And after... (10 Replies)
Discussion started by: jedzio
10 Replies

3. SuSE

shmat failed due to Cannot allocate memory

Hi, My program was running for a whole night. after 12 hours i got an error message "Cannot allocate memory" during the shmat commmand. So can you please let me know what could be the reason? is there any solution? thanks in advance. Regards, Mano (5 Replies)
Discussion started by: ManoharanMani
5 Replies

4. Programming

shmat() with fixed address

Hi, I'm using Ubuntu 10.04 on a 64bit machine. In my shmat() call, I want to assign fixed memory address to shmaddr variable. I have no idea which address value to give. Some where in the net I read we can make use of sysproc info to know the user space addresses, but could not figure out how... (1 Reply)
Discussion started by: sajjar
1 Replies

5. Programming

request_irq always returns EINVAL

request_irq always returns EINVAL What am I doing wrong here ? int mydrvr_open(struct inode *inode, struct file *filp) { int ret; printk("<1> \nModule Opened!"); //disable_irq(4); //free_irq(4, NULL); ret = request_irq(4, &imr_interrupt_handler,IRQF_SHARED,... (0 Replies)
Discussion started by: dragonpoint
0 Replies

6. Programming

Problem shmat in HP-UX Titanium ia64. EINVAL Error

I have a process that needs two active connections to the same zone of shared memory simultaneously. The firs conection works ok, but when i do the second call to shmat it give me error 22 (EINVAL). Only works ok the second call to shmat if i disconnect the first connection (shmdt) Steps:... (3 Replies)
Discussion started by: dairby
3 Replies

7. AIX

sharemem-f-shmat

Hi, I got this error from AIX 4.3.3/db2 7: * %SHAREMEM-F-SHMAT Error getting PUTPARM shared memory address , shmid=23029 * * 3630, errno=13 Anybody who know how to fix this? Thanks in advance, itik (1 Reply)
Discussion started by: itik
1 Replies

8. Linux

shmat() Failure While Using a Large Amount of Shared Memory

Hi, I'm developing a data processing pipeline with multiple stages, with data being moved between the stages using shared memory segments. The size of the data is typically of the order of hundreds of megabytes, and there are typically a few tens of main shared memory segments each of size... (2 Replies)
Discussion started by: theicarusagenda
2 Replies

9. Programming

shmat problem

The first shmat in my program cannot fetch the start address of the shared memory. #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int argc,char *argv) { int pid; key_t mykey; int shmid; long *shm; long *shm2; ... (3 Replies)
Discussion started by: yong
3 Replies

10. HP-UX

shmat() permission denied, what's this?

I have installed an application that runs correctly for root but not other users. The application generates an error that indicates users don't have permission to attach to shared memory. A daemon process creates the shared memory segment. I've checked every permission I can think of but nothing... (2 Replies)
Discussion started by: km4hr
2 Replies

Featured Tech Videos