advanced programming unix environment
fbsd.questions at rachie.is-a-geek.net
Mon Apr 14 21:01:00 UTC 2008
On Monday 14 April 2008 22:02:22 Brother Seamus wrote:
> Hi Mel,
> Thanks for your reply - very insightful - i have beendelving into the c
> library files - which is after all why i am readingthis book, though still
> at the beginning 8).
> On the pracct.c source file I have found it sufficient just to change line
> struct acct acdata;
> struct acctv1 acdata;
I changed it like this, to be compatible with other OS's:
--- proc/pracct.c~ 2005-05-24 03:59:41.000000000 -0800
+++ proc/pracct.c 2008-04-14 12:53:41.000000000 -0800
@@ -13,6 +13,12 @@
#define AXSIG 0
+typedef struct acctv1 acct_t;
+typedef struct acct acct_t;
static unsigned long
compt2ulong(comp_t comptime) /* convert comp_t to unsigned long */
@@ -28,7 +34,7 @@
main(int argc, char *argv)
- struct acct acdata;
+ acct_t acdata;
if (argc != 2)
And added HAVE_ACCTV1 to CFLAGS in Make.defines.freebsd :)
> this leaves me with only 1 error which I have side stepped but not fixed.
> error: +++++++++++++++++++++++++++++++++++++
> bsdexit2.c: In function 'thr_fn2';
> bsdexit2.c:31: Warning format '%d' expects type 'int', but argument 2 has
> type 'pthread_t' +++++++++++++++++++++++++++++++++++++++++
> line 31of threads/bsdexit2.c reads:
> printf("thread 2: ID is %d\n", pthread_self
> which I have commented this line and Make finishes building.
> however which "% ?" operater would I use to display pthread_self.
> In the c library pthread.h it says it is of "pthread_t" type.
Yes, it's a structure, so it's not an integer. pthread_self() returns the
structure, not the thread id. The thread id is burried in the structure and
you shouldn't make any assumptions about it's size or type, since it's opaque
However, you can cast it to int and get away with it ;)
So make it:
printf("thread 2: ID is %d\n", (int)pthread_self());
Problem with today's modular software: they start with the modules
and never get to the software part.
More information about the freebsd-questions