C Libraries??

I can not locate package sys/mkdev.h on HP-UX or Linux. Is it a special package or something?

I just found out that sys/mkdev.h package exists for Solaris in supporting makedev function. Is there a Linux/Unix equavilent package?

Thanks.

Why is this in Shell Programming?

On HP-UX, there is a makedev macro in <sys/mknod.h>. Don't know about Linux.

I don't know. I clicked on C Programming in the UNIX Environment
and it took me here.

Moved to C Programming.

Thanks Driver! :slight_smile:

May I ask another question...


char *showallargs(int fd, struct prpsinfo *p)

when i compile this line gives me an error of "warning: `struct prpsinfo' declared inside parameter list"
could you explain please?

sorry i have another question... what does it mean when a compilation error says " error: dereferencing pointer to incomplete type" for this line


 int argc = p->pr_argc;

p is declared as

   struct prpsinfo *p;

from the previous question.

Driver, thank you so much for all your explanations. you make everything so easy to understand. :slight_smile:

In following the above error, the following is noticed:

C library on Linux, specifically file /usr/include/sys/procfs.h has an incomplete struct of:

 

struct elf_prpsinfo

  {

    char pr_state;                      /* Numeric process state.  */

    char pr_sname;                      /* Char for pr_state.  */

    char pr_zomb;                       /* Zombie.  */

    char pr_nice;                       /* Nice val.  */

    unsigned long int pr_flag;          /* Flags.  */

    unsigned short int pr_uid;

    unsigned short int pr_gid;

    int pr_pid, pr_ppid, pr_pgrp, pr_sid;

    /* Lots missing */

    char pr_fname[16];                  /* Filename of executable.  */

    char pr_psargs[ELF_PRARGSZ];        /* Initial part of arg list.  */

  };      

On Solaris, file /usr/indlue/sys/old_procfs.h has a complete stuct of:

 

typedef struct prpsinfo {

        char    pr_state;       /* numeric process state (see pr_sname) */

        char    pr_sname;       /* printable character representing pr_state */

        char    pr_zomb;        /* !=0: process terminated but not waited for */

        char    pr_nice;        /* nice for cpu usage */

        uint_t  pr_flag;        /* process flags */

        uid_t   pr_uid;         /* real user id */

        gid_t   pr_gid;         /* real group id */

        pid_t   pr_pid;         /* unique process id */

        pid_t   pr_ppid;        /* process id of parent */

        pid_t   pr_pgrp;        /* pid of process group leader */

        pid_t   pr_sid;         /* session id */

        caddr_t pr_addr;        /* physical address of process */

        size_t  pr_size;        /* size of process image in pages */

        size_t  pr_rssize;      /* resident set size in pages */

        caddr_t pr_wchan;       /* wait addr for sleeping process */

        timestruc_t pr_start;   /* process start time, sec+nsec since epoch */

        timestruc_t pr_time;    /* usr+sys cpu time for this process */

        int     pr_pri;         /* priority, high value is high priority */

        char    pr_oldpri;      /* pre-SVR4, low value is high priority */

        char    pr_cpu;         /* pre-SVR4, cpu usage for scheduling */

        o_dev_t pr_ottydev;     /* short tty device number */

        dev_t   pr_lttydev;     /* controlling tty device (PRNODEV if none) */

        char    pr_clname[PRCLSZ];      /* scheduling class name */

        char    pr_fname[PRFNSZ];       /* last component of execed pathname */

        char    pr_psargs[PRARGSZ];     /* initial characters of arg list */

        short   pr_syscall;     /* system call number (if in syscall) */

        short   pr_fill;

        timestruc_t pr_ctime;   /* usr+sys cpu time for reaped children */

        size_t  pr_bysize;      /* size of process image in bytes */

        size_t  pr_byrssize;    /* resident set size in bytes */

        int     pr_argc;        /* initial argument count */

        char    **pr_argv;      /* initial argument vector */

        char    **pr_envp;      /* initial environment vector */

        int     pr_wstat;       /* if zombie, the wait() status */

                        /* The following percent numbers are 16-bit binary */

                        /* fractions [0 .. 1] with the binary point to the */

                        /* right of the high-order bit (one == 0x8000) */

        ushort_t pr_pctcpu;     /* % of recent cpu time, one or all lwps */

        ushort_t pr_pctmem;     /* % of of system memory used by the process */

        uid_t   pr_euid;        /* effective user id */

        gid_t   pr_egid;        /* effective group id */

        id_t    pr_aslwpid;     /* lwp id of the aslwp; zero if no aslwp */

        char    pr_dmodel;      /* data model of the process */

        char    pr_pad[3];

        int     pr_filler[6];   /* for future expansion */

} prpsinfo_t;

My application needs to access the psinfo, how can i solve this problem? also, my application needs to be able to port across the two OS. I have no clue on how to do this. Any suggestions would be greatly appreciated. I'm trying to develop an app. to monitor cpu usage of active processes, if there's an easier way to do this in C please please direct me to it. I think i'm beating myself up with trying to use the library.

very frustrated!! :frowning:

By saying a structure is incomplete simply b/c it says so right in the middle of the struct:


struct elf_prpsinfo

  {

    char pr_state;                      /* Numeric process state.  */

    char pr_sname;                      /* Char for pr_state.  */

    char pr_zomb;                       /* Zombie.  */

    char pr_nice;                       /* Nice val.  */

    unsigned long int pr_flag;          /* Flags.  */

    unsigned short int pr_uid;

    unsigned short int pr_gid;

    int pr_pid, pr_ppid, pr_pgrp, pr_sid;

    /* Lots missing */

    char pr_fname[16];                  /* Filename of executable.  */

    char pr_psargs[ELF_PRARGSZ];        /* Initial part of arg list.  */

  };      

In comparision to the equivalent struct of Solaris, there are many fields that supposed to be in this stuct.

i'll look into the top program as you suggested. however, i have already written a shell script to use top, but i wanted to further create a C app. Can i access top's functions in my app? i'll investigate on this. Again, thanks for your suggestion.
[b]