Sponsored Content
Full Discussion: C: error in wait system call
Top Forums Programming C: error in wait system call Post 302580630 by tafazzi87 on Friday 9th of December 2011 05:24:48 AM
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..
 

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. Programming

c system call

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

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. 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
wait(1) 						      General Commands Manual							   wait(1)

NAME
wait - await process completion SYNOPSIS
[pid] DESCRIPTION
If no argument is specified, waits until all processes (started with of the current shell have completed, and reports on abnormal termina- tions. If a numeric argument pid is given and is the process ID of a background process, waits until that process has completed. Other- wise, if pid is not a background process, exits without waiting for any processes to complete. Because the system call must be executed in the parent process, the shell itself executes without creating a new process (see wait(2)). Command-Line Arguments supports the following command line arguments: The unsigned decimal integer process ID of a command, whose termination is to wait for. WARNINGS
Some processes in a 2-or-more-stage pipeline may not be children of the shell, and thus cannot be waited for. SEE ALSO
csh(1), ksh(1), sh-posix(1), sh(1), wait(2). STANDARDS CONFORMANCE
wait(1)
All times are GMT -4. The time now is 03:48 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy