Tải bản đầy đủ (.pdf) (84 trang)

IT training c programming in linux haskins 2009 4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.25 MB, 84 trang )


David Haskins

C Program m ing in Linux

Download free ebooks at bookboon.com
2


C Program m ing in Linux
© 2009 David Haskins & Vent us Publishing ApS
I SBN 978- 87- 7681- 472- 4

Download free ebooks at bookboon.com
3


Contents

C Programming in Linux

Cont ent s
About the author, David Haskins

7

Introduction

8

Setting up your System



11

1.
1.1
1.2
1.3
1.4
1.5

Chapter One: Hello World
Hello Program 1
Hello Program 2
Hello Program 3
Hello Program 4
Hello World conclusion

13
13
14
17
19
22

2.
2.1
2.2
2.3
2.4
2.5


Data and Memory
Simple data types?
What is a string?
What can a string “mean”
Parsing a string
Data and Memory – conclusion

23
23
27
28
31
34

Please click the advert

Fast-track
your career
Masters in Management

Stand out from the crowd
Designed for graduates with less than one year of full-time postgraduate work
experience, London Business School’s Masters in Management will expand your
thinking and provide you with the foundations for a successful career in business.
The programme is developed in consultation with recruiters to provide you with
the key skills that top employers demand. Through 11 months of full-time study,
you will gain the business knowledge and capabilities to increase your career
choices and stand out from the crowd.


London Business School
Regent’s Park
London NW1 4SA
United Kingdom
Tel +44 (0)20 7000 7573
Email

Applications are now open for entry in September 2011.

For more information visit www.london.edu/mim/
email or call +44 (0)20 7000 7573

www.london.edu/mim/

Download free ebooks at bookboon.com
4


Please click the advert

3.
3.1
3.2
3.3
3.4
3.5

Functions, pointers and structures
Functions
Library Functions

A short library function reference
Data Structures
Functions, pointers and structures – conclusion

35
35
38
39
41
44

4.
4.1
4.2
4.3

Logic, loops and flow control
Syntax of C Flow of control
Controlling what happens and in which order
Logic, loops and flow conclusion

46
46
47
57

5.
5.1
5.2


Database handling with MySQL
On not reinventing the wheel
MySQL C API

58
58
58

6.
6.1
6.2
6.3

Graphics with GD library
Generating binary content
Using TrueType Fonts
GD function reference

63
63
66
68

You’re full of energy
and ideas. And that’s
just what we are looking for.

© UBS 2010. All rights reserved.

Contents


C Programming in Linux

Looking for a career where your ideas could really make a difference? UBS’s
Graduate Programme and internships are a chance for you to experience
for yourself what it’s like to be part of a global team that rewards your input
and believes in succeeding together.
Wherever you are in your academic career, make your future a part of ours
by visiting www.ubs.com/graduates.

www.ubs.com/graduates

Download free ebooks at bookboon.com
5


Contents

C Programming in Linux

Apache C modules
Safer C web applications
Adding some functionality
Apache Modules Conclusion

73
73
76
77


8.
8.1

The Ghost project
A PHP web site generator project

78
78

Conclusion

84

Please click the advert

7.
7.1
7.2
7.3

Download free ebooks at bookboon.com
6


About the author, David Haskins

C Programming in Linux

About t he aut hor, David Haskins
I was born in 1950 in Chelsea, London, but grew up in New Zealand returning to England in 1966. I

have worked in the computer industry since 1975 after a couple of years as a professional drummer.
My first experience was five years as a mainframe hardware engineer for Sperry Univac (now Unisys)
followed by 14 years as an analyst programmer with British Telecom in London.
While engaged in a complex task of converting large quantities of geographical data (map coordinate
references) I discovered the joys of C – its speed and efficiency. That was in 1985 and I have been a
fan of C ever since.
Since 1994 I have been a senior lecturer at the Faculty of Computing, Information Systems and
Mathematics at Kingston University, London. This is a mostly technical university that evolved from
a former polytechnic college with a long tradition of aeronautical engineering.
I am engaged mainly in teaching many computer languages and internet systems design to a large and
multicultural student body.
Most of my academic research and commercial consultancy has been involved with spatial systems
design and the large data volumes and necessary processing efficiency concerns has led me to
concentrate on C and C++. My teaching web site is at www.ubiubi.org which shows some of this
material.
A keen Open Systems enthusiast, I have exclusively centred all my teaching on the Linux platform
since 2002 and Kingston University is well advanced in delivering dual boot facilities for all its
student labs.

I am a keen swimmer and in 2009 completed the annual Lorne Pier-to-Pub race in Victoria, Australia
which is the largest open-sea swimming race in the world where 4,500 people of all ages swim each
January as the shark-spotting planes fly overhead.
When not teaching I am a keen vegetable gardener and amateur musician, playing in jazz groups and in
Scottish bagpipe bands. I play the drums, the great highland bagpipe, the clarinet, the guitar and the piano.
Download free ebooks at bookboon.com
7


Introduction


C Programming in Linux

I nt roduct ion
Why learn t he C language?
Because the C language is like Latin - it is finite and has not changed for years. C is tight and spare,
and in the current economic climate we will need a host of young people who know C to keep existing
critical systems running.
C is built right into the core of Linux and Unix. The design idea behind Unix was to write an
operating system in C so all you needed to port it to a new architecture was a C compiler. Linux is
essentially the success story of a series of earlier attempts to make a PC version of Unix.
A knowledge of C is now and has been for years a pre-requisite for serious software professionals and
with the recent popularity and maturity of Open Systems this is even more true. The terseness and
perceived difficulty of C saw it being ousted from university teaching during the late 1990s in favour
of Java but there is a growing feeling amongst some teaching communities that Java really is not such
a good place to start beginners.
Students paradoxically arrive at colleges knowing less about computing than they did ten years ago as
programming is seen as too difficult for schools to teach. Meanwhile the body of knowledge expected
of a competent IT professional inexorably doubles every few years.
Java is commonly taught as a first language but can cause student confusion as it is in constant flux, is
very abstract and powerful, and has become too big with too many different ways to do the same
thing. It also is a bit “safe” and insulates students from scary experiences, like driving with air-bags
and listening to headphones so you take less care. The core activity of writing procedural code within
methods seems impenetrable to those who start from classes and objects.
So where do we start? A sensible place is “at the beginning” and C is as close as most of us will ever
need to go unless we are becoming hardware designers. Even for these students to start at C and go
further down into the machine is a good idea.
C is like having a very sharp knife which can be dangerous, but if you were learning to be a chef you
would need one and probably cut yourself discovering what it can do. Similarly C expects you to
know what you are doing, and if you don't it will not warn before it crashes.
A knowledge of C will give you deep knowledge of what is going on beneath the surface of higherlevel languages like Java. The syntax of C pretty-well guarantees you will easily understand other

languages that came afterwards like C++, Java, Javascript, and C#.
C gives you access to the heart of the machine and all its resources at a fine-grained bit-level.

Download free ebooks at bookboon.com
8


Introduction

C Programming in Linux

C has been described as like “driving a Porsche with no brakes” - and because it is fast as well this can
be exhilarating. C is is often the only option when speed and efficiency is crucial.
C has been called “dangerous” in that it allows low-level access to the machine but this scariness
is exactly what you need to understand as it gives you respect for the higher-level languages you
will use.
Many embedded miniaturised systems are all still written in C and the machine-to-machine world of
the invisible internet for monitoring and process control often uses C.
Hopefully this list of reasons will start you thinking that it might be a good reason to have a go at
this course.

References
The C Programming Language – Second Edition - Kernighan and Richie
ISBN 0-13-11-362-8
The GNU C Library Free Software Foundation C Manual
/>MySQL C library
/>The GD C library for graphics
/>
APXS - the APache eXtenSion tool
/>

Apache
/>“The Apache Modules Book” Nick Kew, Prentice Hall
ISBN 0-13-240967-4
A Source Code Zip File Bundle is supplied with this course which contains all the material described
and a Makefile.

Download free ebooks at bookboon.com
9


Introduction

C Programming in Linux

The t eaching approach
I began university teaching later in life after a career programming in the telecommunications industry.
My concern has been to convey the sheer fun and creativity involved in getting computers to do what
you want them to do and always try to give useful, practical, working examples of the kinds of things
students commonly tell me they want to do.
Learning a language can be a dry, boring affair unless results are immediate and visible so I tend to use
the internet as the input-output channel right from the start.
I prefer teaching an approach to programming which is deliberately “simple” using old-fashioned
command-line tools and editors and stable, relatively unchanging components that are already built-in
to Unix and Linux distributions such as Suse, Ubuntu and Red Hat.
This is in response to the growing complexity of modern Integrated Development Environments
(IDEs) such as Developer Studio, Netbeans and Eclipse which give students an illusion that they know
what they are doing but generate obfuscation.
My aim is to get students confident and up to speed quickly without all the nightmare associated with
configuring complex tool chains. It is also essentially a license-free approach and runs on anything.
With this fundamental understanding about what is really going on you can progress on to use and

actually understand whatever tools you need in your career.
In order to give a sense of doing something real and useful and up to date, the focus is on developing
visible and effectively professional-quality web-server and client projects to put on-line, using:
Apache Web server and development libraries.
C language CGI programs (C programming using the “make” utility).
C language Apache modules.
MySQL server with C client library interfaces.
GD graphics library with C interfaces.
Incidental use of CSS, (X)HTML, XML, JavaScript, Ajax.
This course has been designed for and lab-tested by first and second year Computer Science Students
at Kingston University, London UK.

Download free ebooks at bookboon.com
10


Setting up your System

C Programming in Linux

Set t ing up your Syst em
This book presumes you are using the Linux operating system with either the KDE3.5, KDE4, or
Gnome desktop. Specific instructions are included for Ubuntu (and Kubuntu) and OpenSuse 11.
If you are using the KDE desktop you will have Konqueror or Dolphin as the File Manager and kate or
kedit for an editor
In Gnome you would probably use Nautilus and gedit
You need to be familiar with the idea of doing some things as “super user” so that you have access
permission to copy or edit certain files. This is normally done by prefacing the Linux command with
“sudo” and providing the password, as in this example:
“sudo cp hello3 /srv/www/cgi-bin/hello3”

which copies the file “hello3” to the area where the Apache server locates common gateway interface
or cgi programs.
In KDE “kdesu konqueror” would open a file manager as super user.
In Gnome “gnomesu nautilus” would open a file manager as super user.
You will need to have installed the following packages:
package

Ubunt u

Open Suse

C developm ent libraries

build- essent ial

Base Developm ent ( pat t er n)

Apache web server

apache2

Web and LAMP Server ( pat t ern)

Apache developm ent libraries

apache2- prefork- dev

apache2- devel

MySQL server, client and

developm ent libraries

m ysql- server libm ysqlclient 15dev

libm ysqlclient- devel

GD and developm ent libraries

libgd2-x pm

gd
gd- devel

Throughout the text you will see references to the folder cgi-bin. The location of this will vary
between Linux distributions. By default this folder used for web programs is:
OpenSuse:
Ubuntu:

/srv/www/cgi-bin
/usr/lib/cgi-bin

Download free ebooks at bookboon.com
11


Setting up your System

C Programming in Linux

To place programs there you need superuser rights, so it may be better to create a folder inside your

own home/*****/public_html/cgi-bin directory and change the ScriptAlias and associated Directory
references inside the Apache configuration files (OpenSuse) /etc/apache2/default-server.conf or
(Ubuntu) /etc/apache2/default-server.conf.

your chance
Please click the advert

to change

the world
Here at Ericsson we have a deep rooted belief that
the innovations we make on a daily basis can have a
profound effect on making the world a better place
for people, business and society. Join us.
In Germany we are especially looking for graduates
as Integration Engineers for
• Radio Access and IP Networks
• IMS and IPTV
We are looking forward to getting your application!
To apply and for all current job openings please visit
our web page: www.ericsson.com/careers

Download free ebooks at bookboon.com
12


Chapter One: Hello World

C Programming in Linux


1. Chapt er One: Hello World
1.1 Hello Program 1
Using the File Manager (in KDE, Konqueror or in Gnome, Nautilus) create a new directory
somewhere in your home directory called something appropriate for all the examples in this book,
perhaps “Programming_In_Linux” without any spaces in the name.
Open an editor (in KDE, kate, or in Gnome, gedit) and type in (or copy from the supplied source code
zip bundle) the following:
/*****************************************************************
C Programming in Linux (c) David Haskins 2008
chapter1_1.c
*****************************************************************/
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello, you are learning C!!\n");
return 0;
}

Save the text as chapter1_1.c in the new folder you created in your home directory.
Open a terminal window and type: gcc -o hello chapter1_1.c
to compile the program into a form that can be executed.
Now type “ls -l” to list the details of all the files in this directory. You should see that chapter1_2.c is
there and a file called “hello” which is the compiled C program you have just written.
Now type: ./hello
to execute, or run the program and it should return the text:
"Hello you are learning C!!".
If this worked, congratulations, you are now a programmer!

Download free ebooks at bookboon.com

13


Chapter One: Hello World

C Programming in Linux

Anatomy of the program:
The part inside /***
reference.

***/ is a comment and is not compiled but just for information and

The “#include...” part tells the compiler which system libraries are needed and which header files
are being referenced by this program. In our case “printf” is used and this is defined in the
stdio.h header.
The “int main(int argc, char *argv[])” part is the start of the actual program. This is an entrypoint and most C programs have a main function.
The “int argc” is an argument to the function “main” which is an integer count of the number of
character string arguments passed in “char *argv[]” (a list of pointers to character strings) that
might be passed at the command line when we run it.
A pointer to some thing is a name given to a memory address for this kind of data type. We can
have a pointer to an integer: int *iptr, or a floating point number: float *fPtr. Any list of things is
described by [], and if we know exactly how big this list is we might declare it as [200]. In this
case we know that the second argument is a list of pointers to character strings.
Everything else in the curly brackets is the main function and in this case the entire program
expressed as lines.
Each line or statement end with a semi-colon “;”.
We have function calls like “printf(...)” which is a call to the standard input / output library
defined in the header file stdio.h.
At the end of the program “return 0” ends the program by returning a zero to the system.

Return values are often used to indicate the success or status should the program not run
correctly.

1.2 Hello Program 2
Taking this example a stage further, examine the start of the program at the declaration of the entry
point function: int main(int argc, char *argv[])
In plain English this means:

Download free ebooks at bookboon.com
14


Chapter One: Hello World

C Programming in Linux

The function called “main”, which returns an integer, takes two arguments, an integer called “argc”
which is a count of the number of command arguments then *argv[] which is a list or array of pointers
to strings which are the actual arguments typed in when you run the program from the command line.
Some Definitions:
function: a block of program code with a return data type, a name, some arguments of varying
data types separated by commas, enclosed in brackets, then the body of the function enclosed in
curly brackets, each statement ending with a semi-colon.
integer symbol int : a counting number like 0,1,2,3,4,5.
list, array symbol []: a sequence of things of the same kind in a numbered order.
pointer symbol * : a memory address locating the start of piece of data of a certain type.
string or char * : a pointer to a sequence of characters like 'c' ,'a', 't' making up “cat”. A
character string ends with s special character NULL or '\0' ascii value 0 or hex 00

e Graduate Programme

for Engineers and Geoscientists

I joined MITAS because
I wanted real responsibili

Please click the advert

Maersk.com/Mitas

Real work
International
Internationa
al opportunities
ree work
wo
or placements

Month 16
I was a construction
supervisor in
the North Sea
advising and
helping
foremen
he
solve
problems
s
Download free ebooks at bookboon.com


15


Chapter One: Hello World

C Programming in Linux

Let's rewrite the program to see what all this means before we start to panic.
/****************************************************************
C Programming in Linux (c) David Haskins 2008
chapter1_2.c
*****************************************************************/
#include <stdio.h>

int main(int argc, char *argv[])
{
int i=0;
printf("Hello, you are learning C!!\n");
printf("Number of arguments to the main function:%d\n", argc);
for(i=0; i{
printf("argument number %d is %s\n", i, argv[i]);
}
return 0;
}

Save the text as chapter1_2.c in the same folder.
Open a terminal window and type:
gcc -o hello2 chapter1_2.c to compile the program into a form that can be executed.
Now type ls -l to list the details of all the files in this directory. You should see that chapter1_2.c is

there and a file called hello2 which is the compiled C program you have just written.
Now type ./hello2 to execute, or run the program and it should return the text:
Hello, you are still learning C!!
Number of arguments to the main function:1
argument number 0 is ./hello2
We can see that the name of the program itself is counted as a command line argument and that the
counting of things in the list or array of arguments starts at zero not at one.
Now type ./hello2 my name is David to execute the program and it should return the text:
Hello, you are still learning C!!
Number of arguments to the main function:5
argument number 0 is ./hello2
argument number 1 is my
argument number 2 is name
Download free ebooks at bookboon.com
16


Chapter One: Hello World

C Programming in Linux

argument number 3 is is
argument number 4 is David
So, what is happening here? It seems we are reading back each of the character strings (words) that
were typed in to run the program.
Anatomy of the program:

printf("Hello, you are learning C!!\n");
the library function printf is called with one argument, a character string ending with a \n or new
line character.

printf("Number of arguments to the main function:%d\n", argc);
the library function printf is called with two arguments, a character string ending with a \n that
includes %d as a placeholder for the second argument argc which is an int.
for(i=0; iis a “for loop” in which we do something repeatedly using a counter integer i which is
incremented (by the expression i++) at each iteration or looping which continues while i stays
less than the value of argc
printf("argument number %d is %s\n", i, argv[i]);
the library function printf is called with three arguments, a character string ending with a \n that
includes %d as a placeholder for the second argument argc which is an int, and %s which is a
placeholder for the third argument argv[i], the i-th member of the array of pointers to character
strings called argv[].

1.3 Hello Program 3
Lets get real and run this in a web page. Make the extra change adding the first output printf statement
“Content-type:text/plain\n\n” which tells our server what kind of MIME type is going to be
transmitted.
Compile using gcc -o hello3 chapter1_3.c and copy the compiled file hello3 to your
public_html/cgi-bin directory (or on your own machine as superuser copy the program to
/srv/www/cgi-bin (OpenSuse) or /usr/lib/cgi-bin (Ubuntu)).

Download free ebooks at bookboon.com
17


Chapter One: Hello World

C Programming in Linux

/*****************************************************************

* C Programming in Linux (c) David Haskins 2008
* chapter1_3.c
*
*****************************************************************/
#include <stdio.h>

int main(int argc, char *argv[])
{
int i=0;
printf("Content-type:text/plain\n\n");
printf("Hello, you are still learning C!!\n");
printf("Number of arguments to the main function:%d\n", argc);
for(i=0;i{
printf("argument number %d is %s\n", i, argv[i]);
}
return 0;
}

Open a web browser and type in the URL http://localhost/cgi-bin/hello3?david+haskins and you
should see that web content can be generated by a C program.

Download free ebooks at bookboon.com
18


Chapter One: Hello World

C Programming in Linux


1.4 Hello Program 4
A seldom documented feature of the function signature for “main” is that it can take three arguments
and the last one we will now look at is char *env[ ] which is also a list of pointers to strings, but in this
case these are the system environment variables available to the program at the time it is run
/*****************************************************************
* C Programming in Linux (c) David Haskins 2008
* chapter1_4.c
*
*****************************************************************/
#include <stdio.h>

int main(int argc, char *argv[], char *env[])
{
int i=0;
printf("Content-type:text/plain\n\n");
printf("Hello, you are still learning C!!\n");
printf("Number of arguments to the main function:%d\n", argc);
for(i=0;i{
printf("argument number %d is %s\n", i, argv[i]);
}
i = 0;
printf("Environment variables:\n");
while(env[i])
{
printf("env[%d] = %s\n", i, env[i]);
i++;
}
return 0;
}


Compile with gcc -o hello4 chapter1_4.c and as superuser copy the program to /srv/www/cgi-bin
(OpenSuse) or /usr/lib/cgi-bin (Ubuntu). You can run this from the terminal where you compiled it
with ./hello4 and you will see a long list of environment variables. In the browser when you enter
http://localhost/cgi-bin/hello4 you will a different set altogether.

Download free ebooks at bookboon.com
19


Chapter One: Hello World

C Programming in Linux

Wikipedia defines environment variables like this:
“In all Unix and Unix-like systems, each process has its own private set of environment
variables. By default, when a process is created it inherits a duplicate environment of its parent
process, except for explicit changes made by the parent when it creates the child........ All Unix
operating system flavors as well as DOS and Microsoft Windows have environment variables;
however, they do not all use the same variable names. Running programs can access the values of
environment variables for configuration purposes. Examples of environment variables include......
PATH, HOME... “

Please click the advert

Study at one of Europe’s
leading universities

closely under the expert supervision of top international
researchers.


DTU, Technical University of Denmark, is ranked as one
of the best technical universities in Europe, and ofers
internationally recognised Master of Science degrees in
39 English-taught programmes.

DTU’s central campus is located just north of Copenhagen
and life at the University is engaging and vibrant. At DTU,
we ensure that your goals and ambitions are met. Tuition
is free for EU/EEA citizens.

DTU ofers a unique environment where students have
hands-on access to cutting edge facilities and work

Visit us at www.dtu.dk

Download free ebooks at bookboon.com
20


Chapter One: Hello World

C Programming in Linux

We will soon find out that QUERY_STRING is an important environment variable for us in
communicating with our program and in this case we see it has a value of “david+haskins” or
everything after the “?” in the URL we typed. It is a valid way to send information to a common
gateway interface (CGI) program like hello4 but we should restrict this to just one string. In our case
we have used a “+” to join up two strings. If we typed: “david haskins” the browser would translate
this so we would see:

QUERY_STRING=david%20haskins
We will learn later how complex sets of input values can be transmitted to our programs.

Download free ebooks at bookboon.com
21


Chapter One: Hello World

C Programming in Linux

1.5 Hello World conclusion
We have seen that a simple program with a tiny bit of input and some output is in fact extremely
powerful in that it reveals and exposes the inner workings of a great deal of our computer.
Even though we have just begun we have encountered many of the key concepts we will use over and
over again:
functions and arguments
Numbers (integers) and character strings as data types
Lists or arrays
Loops using “for” and “while”
We have made a deliberate big leap from writing a program that runs simply in a “terminal screen” to
one which will be visible over the internet in a browser.
The reason for this is that the process of writing programs that interact with users in windowing
systems like Windows, Gnome or KDE is extremely complex and not something you will be asked
very often to do .
The internet browser has become the de facto interface mode for almost everything we do these days
so we might as well understand using it from the start.
In all the successive chapters we will follow this model: starting off with some basic technique then
applying it to a web-based system.
In practice there is not much real-world C common gateway interface programming going on but there

is a great deal of C and C++ based code running as Apache modules and Microsoft IIS ISAPI Dlls.
Perhaps not many know that much of Ebay is written in C / C++.
Why? It is as fast as things get and their business with the bargain snipers in the a global real-time
market needs this lightning fast core, so there is no other way to get that performance.

Download free ebooks at bookboon.com
22


Data and Memory

C Programming in Linux

2. Dat a and Mem ory
2.1 Sim ple dat a t ypes?
When we write programs we have to make decisions or assertions about the nature of the world as we
declare and describe variables to represent the kinds of things we want to include in our information
processing.
This process is deeply philosophical; we make ontological assertions that this or that thing exists and
we make epistemological assertions when we select particular data types or collections of data types
to use to describe the attributes of these things. Heavy stuff with a great responsibility and not to be
lightly undertaken.
As a practical example we might declare something that looks like the beginnings of a database record
for geography.

Brain power
Please click the advert

By 2020, wind could provide one-tenth of our planet’s
electricity needs. Already today, SKF’s innovative knowhow is crucial to running a large proportion of the

world’s wind turbines.
Up to 25 % of the generating costs relate to maintenance. These can be reduced dramatically thanks to our
systems for on-line condition monitoring and automatic
lubrication. We help make it more economical to create
cleaner, cheaper energy out of thin air.
By sharing our experience, expertise, and creativity,
industries can boost performance beyond expectations.
Therefore we need the best employees who can
meet this challenge!

The Power of Knowledge Engineering

Plug into The Power of Knowledge Engineering.
Visit us at www.skf.com/knowledge

Download free ebooks at bookboon.com
23


Data and Memory

C Programming in Linux

/****************************************************************
C Programming in Linux (c) David Haskins 2008
chapter2_1.c
*****************************************************************/
#include <stdio.h>
#DEFINE STRINGSIZE 256
int main(int argc, char *argv[])

{
char town[STRINGSIZE] = "Guildford";
char county[STRINGSIZE] = "Surrey";
char country[STRINGSIZE] = "Great Britain";
int population = 66773;
float latitude = 51.238599;
float longitude = -0.566257;
printf("Town name: %s population:%d\n",town,population);
printf("County: %s\n",county);
printf("Country: %s\n",country);
printf("Location latitude: %f longitude: %f\n",latitude,longitude);
printf("char = %d byte int = %d bytes float = %d bytes\n",
sizeof(char),sizeof(int),sizeof(float) );
printf("memory used:%d bytes\n", ((STRINGSIZE * 3) * sizeof(char)) +
* sizeof(float)));
return 0;
}

sizeof(int) + (2

Here we are doing the following:
-

asserting that all the character strings we will ever encounter in this application will be 255
limited to characters so we define this with a preprocessor statement – these start with #.
assert that towns are associated with counties, and counties are associated with countries some
hierarchical manner.
assert that the population is counted in whole numbers – no half-people.
assert the location is to be recorded in a particular variant (WGS84) of the convention of
describing spots on the surface of the world in latitude and longitude that uses a decimal

fraction for degrees, minutes, and seconds.

Each of these statements allocates memory within the scope of the function in which it is declared.
Each data declaration will occupy an amount of memory in bytes and give that bit of memory a
label which is the variable name. Each data type has a specified size and the sizeof() library function
will return this as an integer. In this case 3 x 256 characters, one integer, and two floats. The exact
size is machine dependent but probably it is 780 bytes.

Download free ebooks at bookboon.com
24


Data and Memory

C Programming in Linux

Outside the function in which the data has been declared this data is inaccessible – this is the scope of
declaration. If we had declared outside the main() function it would be global in scope and other
functions could access it. C lets you do this kind of dangerous stuff if you want to, so be careful.
Generally we keep a close eye on the scope of data, and pass either read-only copies, or labelled
memory addresses to our data to parts of the programs that might need to do work on it and even
change it. These labelled memory addresses are called pointers.
We are using for output the printf family of library functions (sprintf for creating strings, fprintf for
writing to files etc) which all use a common format string argument to specify how the data is to be
represented.
-

%c character
%s string
%d integer

%f floating point number etc.

The remaining series of variables in the arguments are placed in sequence into the format string as
specified.
In C it is a good idea to intialise any data you declare as the contents of the memory allocated for
them is not cleared but may contain any old rubbish.
Compile with: gcc -o data1 chapter2_1.c -lc
Output of the program when called with : ./data1
Town name: Guildford population:66773
County: Surrey
Country: Great Britain
Location latitude: 51.238598 longitude: -0.566257
char = 1 byte int = 4 bytes float = 4 bytes
memory used:780 bytes

Download free ebooks at bookboon.com
25


×