meta data for this page
  •  

This is an old revision of the document!


Network programming @ Noppa | @ wiki - Updated: — julaakko 2009/09/29 15:22


Generic instructions and requirements

  • INDIVIDUAL WORK – NO COPYING – NO GROUPWORK (discuss but do not share code)
  • Use C-language and GCC compiler
    • Eliminate warning-messages (use -Wall for gcc)
    • Follow ANSI standard (C89/90 = -ansi, C99 = -std=c99 for gcc)
Since some new network address structures and functions aren't yet added to ANSI standard, this requirement is removed.
  • Program can be run in Linux (on computers in classroom 6325)
  • Do not use external libraries (use only system libraries)
  • Use iterative approach (no threads unless requested)
  • 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 beginning of EVERY file.
  • 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 !!!!!!! People it is the year 2009, we're not anymore living in the 80s!
  • Write a readme file, which contains:
    • How to run the program. Follow the given instructions on every assignment
    • Description of the task (what has been done, what references used)
    • Features that were implemented
    • Description of division of code to separate files
    • Own ides (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
    • Free what you have allocated

Using Multiple files

Files:

  • main.c - main file, contains implementations of main() and run()-functions.
#include "main.h"
 
int main(int argc, char *argv[])
{
 printf("Main");
 
 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.
#include <stdio.h>
 
void run();
  • file.c - additional file, contains implementation of check()-function.
#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.
#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:

  1. Include the file.h in main.c (or in main.h)
    • main.c after modifications:
      #include "main.h"
      #include "file.h
       
      int main(int argc, char *argv[])
      {
       printf("Main");
       
       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 in run() since it is defined in one of the headers included.
  2. 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