C: error in wait system call


 
Thread Tools Search this Thread
Top Forums Programming C: error in wait system call
# 1  
Old 12-09-2011
[SOLVED]C: error in wait system call

i made this program but when i compile this code, compiler make this error, is an error on wait() system call but argumenti is right, or not?:
Code:
esercizio.c:80:9: error: incompatible type for argument 1 of ‘wait'
/usr/include/i386-linux-gnu/sys/wait.h:116:16: note: expected ‘__WAIT_STATUS' but argument is of type ‘int'
esercizio.c:81:9: error: incompatible type for argument 1 of ‘wait'
/usr/include/i386-linux-gnu/sys/wait.h:116:16: note: expected ‘__WAIT_STATUS' but argument is of type ‘int'

this is the code:
Code:
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <wait.h>
#include <sys/sem.h>
#include <errno.h>
#define SEMPERM 0600

typedef union _semun {
    int val;
    struct semid_ds *buf;
    ushort *array;
}semun ;
int initsem(key_t semkey) {
    int status = 0, semid;
    semid = semget(semkey, 1, SEMPERM | IPC_CREAT | IPC_EXCL);
    if (semid == -1) {
        if (errno == EEXIST) { semid = semget(semkey, 1, 0); }
    } else {
        semun arg;
        arg.val = 1;
        status = semctl(semid, 0, SETVAL, arg);
        }
    if (semid == -1 || status == -1) {
        perror("initsem fallita");
        return(-1);
    }
    return(semid);
}

int signalSem(int semid) {
    struct sembuf signal_buf;
    signal_buf.sem_num = 0;
    signal_buf.sem_op = 1;
    signal_buf.sem_flg = SEM_UNDO;
    if(semop(semid, &signal_buf, 1) == -1) {
        perror("signalSem fallita");
        exit(1);
    }
    return(0);
}

int waitSem(int semid) {
    struct sembuf wait_buf;
    wait_buf.sem_num = 0;
    wait_buf.sem_op = -1;
    wait_buf.sem_flg = SEM_UNDO;
    if(semop(semid, &wait_buf, 1) == -1) {
        perror("waitSem fallita");
        exit(1);
        }
    return(0);
}
int main(){
    pid_t processo,terminato;
    char buffer[3];
    key_t chiave = 0x200;
    int semaforo;
    char *padre,*figlio;
    int i,shmid;
    int *stato;
    shmid=shmget(IPC_PRIVATE , sizeof(buffer[3]), 0666);
    processo=fork();
    semaforo=initsem(chiave);
    if ((semaforo=initsem(chiave))<0) 
        exit(1);
    if (processo==0){
        figlio=(char *)shmat(shmid,NULL,0);
        figlio[0]='a';
        figlio[1]='b';
        figlio[2]='c';
        figlio[3]='d';
        shmdt(figlio);
    }
    else if (processo>0){
        padre=(char *)shmat(shmid,NULL,0);
        sleep(5);
        terminato=wait(*stato);
        if ((terminato=wait(*stato))==-1){
            perror("wait errata");
            exit(-1);
        }
        waitSem(semaforo);
        for (i=0;i<3;i++){
         printf("%c",(char)i);   
        }
        shmdt(padre);
        signalSem(semaforo);
    }
    else {
        perror("fork errata");
        exit(-1);
    }
}


Last edited by tafazzi87; 12-09-2011 at 02:56 PM..
# 2  
Old 12-09-2011
What OS and version are you on? Cygwin? What compiler version are you using and how are you compiling this program?
# 3  
Old 12-09-2011
Code:
int main(){
...
    int *stato;
...
        terminato=wait(*stato);
        if ((terminato=wait(*stato))==-1){

wait takes int *, you're passing int.
# 4  
Old 12-09-2011
When something expects a "int *", you're not supposed to declare an "int *". That creates an empty pointer, pointing to nowhere, which will probably cause your program to crash when used!

What they want when they demand an "int *" is pointer to an integer, the address of an integer, so they can modify that integer.

Code:
int stat;

wait(&stat);


Last edited by Corona688; 12-09-2011 at 01:35 PM..
# 5  
Old 12-09-2011
Quote:
Originally Posted by fpmurphy
What OS and version are you on? Cygwin? What compiler version are you using and how are you compiling this program?
i use gcc 4.6.1 under ubuntu 11.10

Quote:
Originally Posted by Corona688
When something expects a "int *", you're not supposed to declare an "int *". That creates an empty pointer, pointing to nowhere, which will probably cause your program to crash when used!

What they want when they demand an "int *" is pointer to an integer, the address of an integer, so they can modify that integer.

Code:
int stat;

wait(&stat);

thanks a lot i solved this problem Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Call a UNIX script inside another and dont wait for it

Hi I have two scripts script1.sh and script2.sh(say this script is a long running). I want to call script2.sh inside and script1.sh,but when i call script2.sh i dont want to wait for script2 to complete and want this to run in back ground and go on next commands in script 1.sh and finally at the... (2 Replies)
Discussion started by: lijjumathew
2 Replies

2. Shell Programming and Scripting

system call

Trying to figure out a load issue with a webserver. I have traced a php script and noticed the following connect(4, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("XX.XX.XX.XX")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000035> poll(, 1, 2000) = 1 () <0.000120>... (5 Replies)
Discussion started by: rajan007
5 Replies

3. Programming

need help with system call

hi everyone i wrote a system call and compiled the kernel succesfully... my system call is in a file in the kernel folder named my_syscall1.c (kernel/my_syscall1.c) the header file for this system call i added it in the folder include like this include/my_syscall1/my_syscall1.h my problem is... (2 Replies)
Discussion started by: demis87
2 Replies

4. Shell Programming and Scripting

[Perl] Capture system call error message.

Hi, I googled a bit, but could not find the answer to my problem. But I am sure it is a common issue. I have this code: #!/bin/perl -w #-d use strict; sub remsh_test() { my $host = $_; printf "\n----\n\n"; printf "remsh to $host with system call\n"; my $result = system... (3 Replies)
Discussion started by: ejdv
3 Replies

5. Programming

C:system call

Hi I'm studing the system call. I've written a small program that return the time spent in doing some operations. Now I'd like to write one that return the time spent in user mode of a process. I'm reading that i should use the tms struct: clock_t times(struct tms *buf); struct tms {... (2 Replies)
Discussion started by: Dedalus
2 Replies

6. Shell Programming and Scripting

system call

Hi, How to write a system calls in a script ? > cd $HOME > ls -ltr thanks in advance.. (10 Replies)
Discussion started by: hegdeshashi
10 Replies

7. Shell Programming and Scripting

wait command - cat it wait for not-chile process?

Did not use 'wait' yet. How I understand by now the wait works only for child processes, started background. Is there any other way to watch completion of any, not related process (at least, a process, owned by the same user?) I need to start a background process, witch will be waiting... (2 Replies)
Discussion started by: alex_5161
2 Replies

8. Programming

c system call

How the c compiler differentiates the system calls and function calls? (1 Reply)
Discussion started by: rangaswamy
1 Replies

9. UNIX for Advanced & Expert Users

how to differentiate system call from library call

Hi, Ho do I differentiate system call from library call? for example if I am using chmod , how do I find out if it is a system call or library call? Thanks Muru (2 Replies)
Discussion started by: muru
2 Replies

10. Programming

wait system call

hi there, i had some trivial questions about this program here. i am kinda confused with these, hope you can help me to understand here. :) #include<stdio.h> #include<sys/wait.h> #include<sys/types.h> #include<unistd.h> int main(void) { int... (2 Replies)
Discussion started by: a25khan
2 Replies
Login or Register to Ask a Question