Proprio ora ho iniziato a leggere il libro: Advanced Programming in UNIX® Environment . Volevo provare a eseguire il suo primo esempio di codice. Sto eseguendo Scientific Linux 6.4.
Ho scaricato il codice sorgente e, come si dice nel suo README, ho eseguito makeil file non compresso.
Ho scritto il primo programma (un lscomando simulato )
#include "./include/apue.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("usage: test directory_name");
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);
return 0;
}
e inseriscilo nel file non compresso. Come aveva consigliato il libro che poi corse: gcc myls.c. Ma ottengo questo errore:
# gcc myls.c
/tmp/ccWTWS2I.o: In function `main':
test.c:(.text+0x20): undefined reference to `err_quit'
test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
Volevo sapere come posso risolvere questo problema. Voglio anche essere in grado di eseguire un codice che scrivo in qualsiasi directory.
includeche ha il file header apue.h. Ma questo è l'unico file in quella directory. Non capisco dove siano le effettive definizioni delle funzioni! Ho pensato che qualcuno potesse avere familiarità con la struttura del file di codice sorgente di questo libro qui.
.hfile includono i prototipi per le funzioni. Le loro implementazioni sono in .soo .afile che devono essere presenti sulla scatola. Queste sono librerie dinamiche e statiche che contengono le funzioni.
apue.h?
err_{quit,sys}di venire?