Repost, can't compile the very first code from Late Stevens apue.
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Unix and Linux reviews > Free Unix support > Unix Programming > Repost, can't compile the very first code from Late Stevens apue.




  Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    Repost, can't compile the very first code from Late Stevens apue.  
vectrum


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
01-23-04 10:23 PM


This is my repost. I am a unix newbie trying to learn *nix/C programming.
I can't compile the very first code from Late Stevens apue.  I use freebsd
5.
Plz read the following where I have given all the details
regarding compilation and execution of compiled programme with the errors I
got.
I can't proceed a bit. If I have to halt at the very first code, I simply
don't
know how I will be able to go on. I am sorry to make this post lenthy but I
thought
it might help u to analysis where my fault is or what I have to do .
When I posted first I didn't include codes and error msgs and I
had been advised to give in detail. There are 3 code files in this post,
dirlist.c, error.c & ourhdr.h  I also expect your opinion of whether I
should
learn nix programming or learn c in depth.
--------------------------------------------------------------------------
#include<sys/types.h>
#include<dirent.h>
#include"ourhdr.h"

int
main(int argc, char argv[])
{
DIR *dp;
struct dirent *dirp;
if (argc !=2)
err_quit("a single argment is required");
if ((dp = opendir(argv[1]))== NULL)
err_sys("can't open %s", argv[1]);
while( (dirp=readdir(dp))!=NULL)
printf("%s\n",dirp->d_name);
closedir(dp);
exit(0);
}

----------------------------------------------------------------------------
--
$ gcc dirlist.c
dirlist.c: In function `main':
dirlist.c:12: warning: passing arg 1 of `opendir' makes pointer from integer
without a cast
/var/tmp//ccLw7U6K.o: In function `main':
/var/tmp//ccLw7U6K.o(.text+0x1f): undefined reference to `err_quit'
/var/tmp//ccLw7U6K.o(.text+0x53): undefined reference to `err_sys'
----------------------------------------------------------------------------
---
When I comment out the two error functions like /* err_quit("a single...  */
and /*err_sys(can't open.... */ it is compiled with following warning;
warning: passing arg 1 of `opendir' makes pointer from integer without a
cast.
But when I run it I get the following message;
----------------------------------------------------------------------------
---
$ a.out
Segmentation fault (core dumped).
----------------------------------------------------------------------------
---
At this point I try to open the "a.out.core" file with text editor.
Only one word, "ELF" is there.
Again I tried to compile it with another file, error.c(following file);
----------------------------------------------------------------------------
---
#include<errno.h>  /* for definition of errno */
#include<stdarg.h>  /* ANSI C header file */
#include"ourhdr.h"

static void err_doit(int, const char *, va_list);

char *pname = NULL;  /* caller can set this from argv[0] */

/* Nonfatal error related to a system call.
* Print a message and return. */

void
err_ret(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
return;
}

/* Fatal error related to a system call.
* Print a message and terminate. */

void
err_sys(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
exit(1);
}

/* Fatal error related to a system call.
* Print a message, dump core, and terminate. */

void
err_dump(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
abort();  /* dump core and terminate */
exit(1);  /* shouldn't get here */
}

/* Nonfatal error unrelated to a system call.
* Print a message and return. */

void
err_msg(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
return;
}

/* Fatal error unrelated to a system call.
* Print a message and terminate. */

void
err_quit(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
exit(1);
}

/* Print a message and return to caller.
* Caller specifies "errnoflag". */

static void
err_doit(int errnoflag, const char *fmt, va_list ap)
{
int errno_save;
char buf[MAXLINE];

errno_save = errno;  /* value caller might want printed */
vsprintf(buf, fmt, ap);
if (errnoflag)
sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
strcat(buf, "\n");
fflush(stdout);  /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL);  /* flushes all stdio output streams */
return;
}
----------------------------------------------------------------------------
-------
$ gcc dirlist.c error.c and I got the file compiled with warning;
---------------------------------------------------------------------
dirlist.c: In function `main':
dirlist.c:12: warning: passing arg 1 of `opendir' makes pointer from integer
without a cast
----------------------------------------------------------------------------
------
When I tried to run the file with argument like;
-----------------------
$ a.out guess.c
Bus error (core dumped)
--------------------------
This core file contains the same word "elf".  ourhdr.h is follows;
---------------------------------------------------
/* Our own header, to be included *after* all standard system headers */

#ifndef __ourhdr_h
#define __ourhdr_h

#include <sys/types.h> /* required for some of our prototypes */
#include <stdio.h> /* for convenience */
#include <stdlib.h> /* for convenience */
#include <string.h> /* for convenience */
#include <unistd.h> /* for convenience */

#define MAXLINE 4096 /* max line length */

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */

typedef void Sigfunc(int); /* for signal handlers */

/* 4.3BSD Reno <signal.h> doesn't define SIG_ERR */
#if defined(SIG_IGN) && !defined(SIG_ERR)
#define SIG_ERR ((Sigfunc *)-1)
#endif

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))

/* prototypes for our own functions */
char *path_alloc(int *);   /* {Prog pathalloc} */
int  open_max(void);   /* {Prog openmax} */
void clr_fl(int, int);   /* {Prog setfl} */
void set_fl(int, int);   /* {Prog setfl} */
void pr_exit(int);    /* {Prog prexit} */
void pr_mask(const char *);  /* {Prog prmask} */
Sigfunc *signal_intr(int, Sigfunc *);/* {Prog signal_intr_function} */

int tty_cbreak(int);   /* {Prog raw} */
int tty_raw(int);    /* {Prog raw} */
int tty_reset(int);   /* {Prog raw} */
void tty_atexit(void);   /* {Prog raw} */
#ifdef ECHO /* only if <termios.h> has been included */
struct termios *tty_termios(void); /* {Prog raw} */
#endif

void sleep_us(unsigned int); /* {Ex sleepus} */
ssize_t readn(int, void *, size_t);/* {Prog readn} */
ssize_t  writen(int, const void *, size_t);/* {Prog writen} */
int daemon_init(void);   /* {Prog daemoninit} */

int s_pipe(int *);    /* {Progs svr4_spipe bsd_spipe} */
int recv_fd(int, ssize_t (*func)(int, const void *, size_t));
/* {Progs recvfd_svr4 recvfd_43bsd} */
int send_fd(int, int);   /* {Progs sendfd_svr4 sendfd_43bsd} */
int send_err(int, int, const char *);/* {Prog senderr} */
int serv_listen(const char *); /* {Progs servlisten_svr4 servlisten_44bsd}
*/
int serv_accept(int, uid_t *); /* {Progs servaccept_svr4 servaccept_44bsd}
*/
int cli_conn(const char *); /* {Progs cliconn_svr4 cliconn_44bsd} */
int buf_args(char *, int (*func)(int, char **));/* {Prog bufargs} */


int ptym_open(char *);   /* {Progs ptyopen_svr4 ptyopen_44bsd} */
int ptys_open(int, char *); /* {Progs ptyopen_svr4 ptyopen_44bsd} */
#ifdef TIOCGWINSZ
pid_t pty_fork(int *, char *, const struct termios *,
const struct winsize *); /* {Prog ptyfork} */
#endif

int lock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */

#define read_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
#define readw_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
#define write_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
#define writew_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
#define un_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)

pid_t lock_test(int, int, off_t, int, off_t); /* {Prog locktest} */


#define is_readlock(fd, offset, whence, len) \
lock_test(fd, F_RDLCK, offset, whence, len)
#define is_writelock(fd, offset, whence, len) \
lock_test(fd, F_WRLCK, offset, whence, len)

void err_dump(const char *, ...); /* {App misc_source} */
void err_msg(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_sys(const char *, ...);
void log_msg(const char *, ...);  /* {App misc_source} */
void log_open(const char *, int, int);
void log_quit(const char *, ...);
void log_ret(const char *, ...);
void log_sys(const char *, ...);
void TELL_WAIT(void);            /* parent/child from {Sec race_conditions}
*/
void TELL_PARENT(pid_t);
void TELL_CHILD(pid_t);
void WAIT_PARENT(void);
void WAIT_CHILD(void);

#endif /* __ourhdr_h */








[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 01:22 PM.      Post New Thread    Post A Reply      
  Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register