BASH/C3/Using-File-Descriptors/English

From Script | Spoken-Tutorial
Revision as of 11:01, 6 September 2014 by Nancyvarkey (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

­Title of script: Using file descriptors

Author: Lavitha Pereira and Ashwini Patil

Keywords: Video tutorial, file descriptors to file, closing file descriptors


Visual Cue
Narration
Display Slide 1 Dear friends, Welcome to the spoken tutorial on Using file descriptors
Display Slide 2 In this tutorial, we will learn to
  • Assign an output file descriptor
  • Assign an input file descriptor
  • Close the file descriptor (fd)
  • With the help of some examples
Display Slide 3

Prerequisites

To follow this tutorial you should have knowledge of Shell Scripting in BASH.

If not, for relevant tutorials please visit our website which is as shown,(http://www.spoken-tutorial.org)

Display Slide 4

System requirements

For this tutorial I am using
  • Ubuntu Linux 12.04 Operating System and
  • GNU BASH version 4.2

Please note, GNU Bash version 4 or above is recommended for practice.

Introduction

Slide 5

Let us start with an introduction.

We have already studied about file descriptors in the previous tutorial.

  • 0, 1 and 2 are the standard file descriptors for stdin, stdout and stderr
  • File descriptors are used for i/o redirection.
Slide 6

Syntax:

exec [File descriptor] > filename

The syntax to assign a file descriptor to an output file is:

exec [File descriptor] > filename


Let us see an example.

I have a code file with the name fdassign.sh


#!/usr/bin/env bash The first line is the shebang line.
exec 3> output.txt


The exec command replaces the current shell process.


It will be executed in the place of the current shell without creating a new process.


We know that 0, 1, and 2 are standard file descriptors.


For any newly opened file, we have additional file descriptors from 3 to 9.


Here, 3 is the file descriptor.

This will write the output to the output.txt file.


echo "Welcome to BASH learning" >&3


The string "Welcome to BASH learning" is sent to the file output.txt

This is done via file descriptor 3.


This is similar to redirecting a string to a file.

date >&3


Each new string will be appended to the file.


For example:

We will append the current system date to the output.txt file.


The syntax is:

date SPACE greater-than symbol ampersand sign 3


exec 3<&- Here we close the file descriptor.


After this line, the descriptor cannot write anything to the output.txt file.

CTRL+ALT+T keys Let us execute the code and see the output.

Open the terminal using CTRL+ALT+T keys.

Type:

chmod +x fdassign.sh

./fdassign

Type:

chmod +x fdassign.sh

./fdassign

cat output.txt Let us check the output now by typing.-

cat output.txt


We can see that the string Welcome to BASH learning and the current system date is displayed.

Type:

echo “Hi” > &3

Let us go back to the editor.


Now I will type echo at the end, after the descriptor is closed.


Type:

echo “Hi” > &3

Click on Save.

Let us execute the script once again and see what happens.

./fdassign On the terminal, press the uparrow key, to recall the previous command

./fdassign


press Enter.

./fdassign.sh: line 6: 3: Bad file descriptor We see an error

Bad file descriptor

Cut

echo "hiii" >&3

Paste above

Let us fix this error.


Come back to the editor.

I will cut the last line of code and paste it below the date command

./fdassign.sh Click on Save.


Let us execute the code once again.


On the terminal, recall the previous command:

./fdassign.sh


press Enter.

cat output.txt Now let us open the output.txt file.


Type:

cat output.txt

Welcome to BASH learning

Fri Aug 8 15:02:51 IST 2014

Hi

We can see the output.

The string Hi is displayed at the end.


<<PAUSE>>

Now we will assign the file descriptor to the input file.


Let us see an example.


I have a file named fdread.sh


Let us go through it.

[Highlight]

exec 3< output.txt

cat <&3

exec 3<&-

This is the exec command.


Here we will read the file output.txt


The line

exec 3< output.txt

will open the file for reading.


cat command will display the content of the file.


And finally we close the file descriptor.

chmod +x fdread.sh

./fdread.sh

Now let us execute this shell script.


On the terminal, let me clear the prompt. Type:

chmod +x fdread.sh


Type ./fdread.sh


Welcome to BASH learning

Fri Aug 8 15:12:06 IST 2014

Hi

We can see the output on the terminal.


The content of output.txt file is displayed.

This brings us to the end of this tutorial.
Summary slide 7 Come back to the slides.

Let us summarize.

In this tutorial we learnt to,

  • Assign the output file descriptor
  • Assign the input file descriptor
  • Closing the file descriptor.
Assignment Slide 8 As an assignment,

Try to

  • append a few lines to a file test.txtusing file descriptors
  • Display the content of the file using file descriptors
Display Slide 9

http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial

About the Spoken Tutorial Project

Watch the video available at the link shown below.


It summarises the Spoken Tutorial project.


If you do not have good bandwidth, you can download and watch it.

Display Slide 10

Spoken Tutorial Workshops

The Spoken Tutorial Project Team
  • Conducts workshops using spoken tutorials
  • Gives certificates to those who pass an online test

For more details, please write to

contact@spoken-tutorial.org

Display Slide 11

Acknowledgement

Spoken Tutorial Project is a part of the Talk to a Teacher project.


It is supported by the National Mission on Education through ICT, MHRD, Government of India.


More information on this Mission is available at: http://spoken-tutorial.org\NMEICT-Intro

Display Slide 12 The script has been contributed by FOSSEE and Spoken-Tutorial teams.


This is Ashwini from IIT Bombay.

Thank you for joining.

Contributors and Content Editors

Ashwini, Nancyvarkey