meta data for this page
Network programming @ Noppa | @ wiki - Updated: — Jussi Laakkonen 2012/08/20 17:38
Updates:
16.9.2011: Added clarification for README file
Generic instructions and requirements
- INDIVIDUAL WORK – NO COPYING – NO GROUPWORK (discuss but do not share code)
- If you're caught copying directly from others or from Internet/books your grade is 0.
- Remember the difference between plagiarism and adaptation.
- Use C-language and GCC compiler (see man gcc)
- Eliminate warning-messages (use
-Wall
forgcc
) - Try to follow coding standards (
-ansi
is not required), use extended C99 standard: GNU99:-std=gnu99
.
- Program can be run in Linux (on computers in classroom 6218)
- Do not use external libraries (use only system libraries, all required should be installed into classroom 6218 machines)
- Use iterative approach (no threads or fork() unless requested)
- Graphical user interface IS NOT REQUIRED, NOR RECOMMENDED
- Use a make file (see man make or use a Makefile template)
- Compile: make build
- Clean: make clean
- Comment and document your code
- Comments directly to source code files
- Add name, student number and email into the beginning of EVERY file.
- All documentation either in English or in Finnish
- Use good structure for your code
- Divide code to functions based on responsibilities.
- Divide functions to different files based on responsibilities.
- C-code in .c files and header descriptions in .h files.
- ONE MAIN FUNCTION IS NOT GOOD STRUCTURING OF CODE !
- !!!!!!! NO GOTO STRUCTURES !!!!!!!
- Write a readme file, AS PLAIN TEXT, !NO DOC/ODT/PDF/!, which contains:
- How to run the program. Follow the given instructions on every assignment
- Description of the task (what has been done)
- List what references were used (books, Internet pages/tutorials, etc.)
- Features that were implemented
- Description of division of code into separate files
- Own ideas (text) or solutions (code) for improving the task
- Own improvements must clearly be a new feature, i.e. separate feature that enhances functionalities of the application.
- Must be documented! No documentation about own feature(s) → no additional points
- Check for error conditions
- Debug with GDB (see man gdb)
- Check that there are no memory leaks (use Valgrind, see man valgrind)
- REMEMBER TO CLOSE SOCKETS when they're not used
- Free the memory that was allocated.
Using Multiple files
Files:
- main.c - main file, contains implementations of main() and run()-functions.
- main.c
#include "main.h" int main(int argc, char *argv[]) { printf("Main\n"); run(argc); return 0; } void run(int _type) { if(check(_type) < 0) printf("Error\n"); else printf("Success\n"); }
- main.h - header for main.c, contains prototype for
run()
-function.
- main.h
#include <stdio.h> void run();
- file.c - additional file, contains implementation of check()-function.
- file.c
#include "file.h" int check(int _type) { if(_type == RIGHT) return 1; else return -1; }
- file.h - header for file.c, contains prototype for
check()
-function.
- file.h
#define RIGHT 0 int check(int);
To use the function defined in file.h and implemented in file.c in the main.c following steps are needed:
- Include the file.h in main.c (or in main.h)
- main.c after modifications:
- main_mod.c
#include "main.h" #include "file.h int main(int argc, char *argv[]) { printf("Main\n"); run(argc); return 0; } void run(int _type) { if(check(_type) < 0) printf("Error\n"); else printf("Success\n"); }
- After this the compiler and linker can find the function
check()
used inrun()
since it is defined in one of the headers included.
- Add file.c into the Makefile of the application as source (remember to separate multiple files with spaces), in this case
SOURCES=main.c file.c