COP 4338 Summer B 2015 - Programming 3



Francisco Ortega, Ph.D.
University Park, ECS 263.

Office hours:Tuesday and Thursday from 5:00pm to 6:00pm or by appointment.

Web Site:

Web Site: FranciscoRaulOrtega.Com

Lecture time: Tuesday and Thursday 18:30-21:50

Final Exam Date: Last day of class.

Location: ECS 145


Text Book:

Note: Wait until we start class, when I go over the references needed for this class

The Linux Programming Interface by Michael Kerrisk.
Why? While the course draws from many textbooks and other online resources, the one book that contains multiple topics that will be covered in this class is this book.
It is also important to note that the TLPI book contains many linux system information that is relevant for this class, in particular, towards the end of this class (e.g., system calls)
It is recommended that you have access to one C book. There are two suggested options:

  • The C Programming Language, 2nd Edition by Kernighan and Ritchie.
  • C Programing. A Modern Approach (Second Edition). by King.

  • The difference is in the price and the size. The book by King is very complete and it covers C99 features which are very useful. It is a larger book with resources that can be very useful. However, the price in amazon is 110.98 for a new one. The book by Kernighan and Richie is a great book. It is a bit smaller and it goes to the point. It is also cheaper at 51.80 at amazon. This book it is the common required book for this class by most instructors. I'm providing the option of either book because I want you to spend the money for something that you want. I personally like both books. If you already have a C book, then you may not want to buy either one.

    C++: There are several C++ books. A quick tour of C++ by Stroupstrup is a great book and quick read. I recommend this book if you are new to C++. The other book by Stroupstrup is the C++ Programming Language, 4th edition. There is also C++ Primer by Lipmann et al. For data structures, Mark Weiss's book (but the C++ version) is a great book (latest edition). For algorithms, the CLRS book (Introduction to Algorithms). Finally, the reference book by Josuttis is a great book (The C++ Standartd Library) and the books by Scott Meyers.


  • Final Exam 40%. No make-up final.
  • Quizzes 10% (Tentative: 4 Quizzes. Each quizze will be given after the project is due and it will be a short evalaution about your understanding of the project you just completed. You can drop the lowest grade. No make-up quizzes. Note that the last quiz will be about material covered in the previous homework and in particular, the final project.
  • Projects 30% (Tentative : 3 projects. 10% each.)
  • Final Project 20% (Either pick your project or I will assigned you a project)

    Tentative Projects:

  • A project that will covered various topics of C language
  • Threads
  • Sockets (and more)
  • Final Project


    The class will try to cover various topics depending on time availability and instructor's discretion. The objective of the class is to teach C programming language and advanced topics, using a Unix/Linux operating System. There are additional topics that may be covered if time allows.

    The student is expected to have an understanding of data structures, object-oriented programming, and computer fundamentals. While this class will use linux/unix to work in lots of their problem, the student is not required to know unix/linux but knowing it in advanced of the class may beneficial. In particular, how to edit a file (vim, emacs, or nano), compiled a basic C file (gcc), and do basic operations in the terminals such as directory listing (ls), copying (cp), and moving (mv), among others. Nevertheless, The student will be given enough information to do this. Some students may prefer to edit their homework in their editor of their choice (e.g., Sublime) and then copy the files to a linux/unix server.

    If you area already running a unix/linux systems (including macosx, freebsd), you can worked directly in your favorite editor, without the need to use a terminal editor. Nevertheless, it is important that you at least know how to use a basic terminal editor. The nano and vim editors may be the simpler ones to use in the terminal. If you have Windows OS, you may want to install a virtual machine with linux. While there is a way to run unix/linux programs and commands without a virtual machine (using cygwin), it may best to have a VM running. Remember that you can use the school's server to run your code, without the need of anything but a terminal program like putty (windows) or ssh from your linux/macosx machine.
    I like to use Sublime editor when using a graphical interface. If you are running your own linux box, then it will be much easier to use eclipse or other IDE to debug if you need it. However, it is also important to know how to debug with gdb and use terminal editors. If you are going to run your own linux machine, use the distribution you like best. I like debian. Nevertheless, your code must compiled and run in server. It must compiled with gcc -std=c99 -Wall ...
    Two great IDE that work in MAC OsX, Windows, and Linux are: CodeLite and CodeBlocks. It is important to remember that Visual Studio does not have a C compiler (it is a C++ compiler). For compilers, use either gcc or clang. If you are running on macosx on the latest edition, your mac will have clang. Some people prefer NetBeans or Eclipse for C, which is fine. Remember that some of your projects, I will use the command line to compile, so you have to be sure once you are finished with your project that it compiles in gcc.

    It is important that you read ahead. This is even more important when you are taking a summer class that last 6 weeks. You are expected to be an more mature student at this point. The instructor is here to help. Please let me know if you have any questions.
    The class will start with an introduction to C including memory allocation. I will then move to threads, and network programming. Depending on the time, we will also covered unix/linux systems calls and other topics, such as signals. The list below show a possible outline (not in order) to be covered in this class.
    While I provide a list of topics below, the most important topics for this course are: C, Threads, Networking (sockets), and Some Linux Systems calls. Depending on time, I will modified topics.
    With additional time, I will try to provide some C++. Note that if you are in a 6 week course, time will go by very quick.


  • Code of Academic Integrity:
  • University Policies: academic misconduct, sexual harassment, religious holydays, and information on services for students with disabilities
  • If you have any disability make sure you let me know with time to make any accommodation. Also, please make sure you check the FIU Disability Center web site at : I will be more than happy to accommodate any part of this class, based on the recommendation of DRC.

    Incomplete Grade Policy

    Incomplete grades are not a way to get more time to finish the course because of course load or to “repeat” the course. I will be very strict when it comes to giving incomplete. In most cases, I will not issue an incomplete. I will only approved the Incomplete if the conditions explained below are met:

    The conditions that must be met, in addition with FIU Incomplete Grade Policy are: the student must have a passing grade at the moment that it request the “I” grade; The incomplete will be only issue if is due to a documented event that prevents the student from continuing the semester. The student must finished within 2 semester. I will use my discretion to give incompletes.

    How to do well in this class (applies to all classes)

    The following items are what I found during my studies to help me. Maybe some will help you


    You will need to submit your homework via moodle. When submitting homework to moodle, you will need to upload ONE compress file (zip,rar) with the following format: (or .rar) Each homework will stay if you need to print out the homework or not before coming to class.


    Some slides were borrowed from C Programming A Modern Approach.Some of the material has also been borrowed from the C Programming Language book by Kernighan and Ritchie. In most cases, I have tried to place the copyright of the corresponding author. If you think is missing, please let me know. However, the content has been modified. The power points sometimes make sense only with the lecture. Use freely, but make sure to add the correct copyright if missing. Finally, you will notice the material from C Programming Language because they are screenshots from scans that I did from the book.

    Go to moodle for lectures


  • News will be posted in moodle.