1 / 60

Hank Childs, University of Oregon

talib
Télécharger la présentation

Hank Childs, University of Oregon

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CIS 330: _ _ _ _ ______ _ _____ / / / /___ (_) __ ____ _____ ____/ / / ____/ _/_/ ____/__ __ / / / / __ \/ / |/_/ / __ `/ __ \/ __ / / / _/_// / __/ /___/ /_ / /_/ / / / / /> < / /_/ / / / / /_/ / / /____/_/ / /__/_ __/_ __/ \____/_/ /_/_/_/|_| \__,_/_/ /_/\__,_/ \____/_/ \____//_/ /_/ Lecture 3: File I/O, Redirection, Pipes Hank Childs, University of Oregon April 9th, 2014

  2. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  3. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  4. Announcements • Matt OH: Mon/Tues 4-5:30, DES 232 • Pavel OH: Weds/Thurs 4-5, DES 100

  5. What is the best way to get ahold of people? • Piazza? • Email to uoregon.edu?

  6. What is the best way to get grading information to you?

  7. Questions? • Something unclear from last time? • Question about HW? • CIS accounts? • Piazza? • vi tips?

  8. Quiz • What are the steps to make a script “s” that says “hello world”? • Answer: • with editor, create file “s” with contents echo “hello world” • chmod 755 s # or 700 or 750 • ./s

  9. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  10. Project 1C

  11. Unix command: tar • Anyone know what tar stands for? tar = tape archiver IBM tape library

  12. Unix command: tar • Problem: you have many files and you want to… • move them to another machine • give a copy to a friend • etc. • Tar: take many files and make one file • Originally so one file can be written to tape drive

  13. Unix command: tar • tar cvf 330.tar file1 file2 file3 • scp 330.tar @ix:~ • ssh ix • tar xvf 330.tar • ls file1 file2 file

  14. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  15. File I/O: streams and file descriptors • File descriptors: • Lower level interface to files and devices • Provides controls to specific devices • Type: small integers (typically 20 total) • Streams: • Higher level interface to files and devices • Provides uniform interface; easy to deal with, but less powerful • Type: FILE * Streams are more portable, and more accessible to beginning programmers. (Use streams!)

  16. File I/O • Process for reading or writing • Open a file • Tells Unix you intend to do file I/O • Function returns a “FILE * • Used to identify the file from this point forward • Checks to see if permissions are valid • Read from the file / write to the file • Close the file

  17. Opening a file • FILE *handle = fopen(filename, mode); Example: FILE *h = fopen(“/tmp/330”, “wb”); Close when you are done with “fclose” Note: #include <stdio.h>

  18. Reading / Writing

  19. Example

  20. fseek

  21. ftell

  22. We have everything we need to make a copy command… • fopen • fread • fwrite • fseek • ftell Can we do this together as a class?

  23. Return values in shells $? is the return value of the last executed command

  24. Printing to terminal and reading from terminal • In Unix, printing to terminal and reading from terminal is done with file I/O • Keyboard and screen are files in the file system! • (at least they were …)

  25. Standard Streams • Wikipedia: “preconnected input and output channels between a computer program and its environment (typically a text terminal) when it begins execution” • Three standard streams: • stdin(standard input) • stdout (standard output) • stderr (standard error) What mechanisms in C allow you to access standard streams?

  26. printf • Print to stdout • printf(“hello world\n”); • printf(“Integers are like this %d\n”, 6); • printf(“Two floats: %f, %f”, 3.5, 7.0); Have you ever wondered how printf takes a variable number of arguments?

  27. Variable-Length Argument Lists Adapted from Kernigan & Ritchie C book

  28. fprintf • Just like printf, but to streams • fprintf(stdout, “helloworld\n”); •  same as printf • fprintf(stderr, “helloworld\n”); • prints to “standard error” • fprintf(f_out, “helloworld\n”); • prints to the file pointed to by FILE *f_out.

  29. Unix shells allows you to manipulate standard streams. • “>” redirect output of program to a file • Example: • ls > output • echo “this is a file” > output2 # Project 1B • cat file1 file2 > file3

  30. Unix shells allows you to manipulate standard streams. • “<” redirect file to input of program • Example: • python < myscript.py • Note: python quits when it reads a special character called EOF (End of File) • You can type this character by typing Ctrl-D • This is why Python quits when you type Ctrl-D • (many other programs too)

  31. Unix shells allows you to manipulate standard streams. • “>>” concatenate output of program to end of existing file • (or create file if it doesn’t exist) • Example: • echo “I am starting the file” > file1 • echo “I am adding to the file” >> file1 • cat file1 I am starting the file I am adding to the file

  32. What’s happening here? ls is outputting its error messages to stderr

  33. Redirecting stderr in a shell

  34. Redirecting stderr to stdout Convenient when you want both to go to the same stream

  35. c functions: fork and pipe • fork: duplicates current program into a separate instance • Two running programs! • Only differentiated by return value of fork (which is original and which is new) • pipe: mechanism for connecting file descriptors between two forked programs Through fork and pipe, you can connect two running programs. One writes to a file descriptor, and the other reads the output from its file descript Only used on special occasions. (And one of those occasions is with the shell.)

  36. pipes in Unix shells • represented with “|” • output of one program becomes input to another program

  37. Very useful programs • grep: keep lines that match pattern, discard lines that don’t match pattern

  38. Very useful programs • sed: replace pattern 1 with pattern 2 • sed s/pattern1/pattern2/g • s means substitute • g means “global” … every instance on the line sed is also available in “vi” :s %s/pattern1/pattern2/g (% means all lines) :s 103,133s/p1/p2/g (lines 103-133)

  39. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  40. Project 2A • Prompt posted tonight, due Monday • Read files, extract data, write new files

  41. Outline • Announcements/Review • Project 1C • File I/O, Redirection, Pipes • Project 2A • Symbols and mangling (if time) • Killing and suspending jobs (if time) • Web pages (if time)

  42. Problem with C…

  43. Problem with C… No checking of type…

  44. Problem is fixed with C++…

  45. Problem is fixed with C++…

  46. Mangling • Mangling refers to combing information about the return type and arguments and “mangling” it with function name. • Way of ensuring that you don’t mix up functions. • Causes problems with compiler mismatches • C++ compilers haven’t standardized. • Can’t take library from icpc and combine it with g++.

  47. C++ will let you overload functions with different types

  48. C++ also gives you access to mangling via “namespaces” Functions or variables within a namespace are accessed with “::”

  49. C++ also gives you access to mangling via “namespaces” The “using” keyword makes all functions and variables from a namespace available without needing “::”. And you can still access other namespaces.

More Related