<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3120867527453654801</id><updated>2011-12-21T11:11:28.332+02:00</updated><title type='text'>Youta</title><subtitle type='html'>Technical and programming related articles</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-2149404344909837870</id><published>2011-12-18T17:58:00.001+02:00</published><updated>2011-12-18T18:02:02.759+02:00</updated><title type='text'>SCSI-3 persistent reservations</title><content type='html'>SCSI-3 Persistent Reservations (SCSI-3 PR) are required for I/O fencing and resolve the issues of using SCSI reservations in a clustered SAN environment. SCSI-3 PR enables access for multiple nodes to a device and simultaneously blocks access for other nodes.&lt;br /&gt;&lt;br /&gt;SCSI-3 reservations are persistent across SCSI bus resets and support multiple paths from a host to a disk. In contrast, only one host can use SCSI-2 reservations with one path. If the need arises to block access to a device because of data integrity concerns, only one host and one path remain active. The requirements for larger clusters, with multiple nodes reading and writing to storage in a controlled manner, make SCSI-2 reservations obsolete.&lt;br /&gt;&lt;br /&gt;SCSI-3 PR uses a concept of registration and reservation. Each system registers its own "key" with a SCSI-3 device. Multiple systems registering keys form a membership and establish a reservation, typically set to "Write Exclusive Registrants Only." The WERO setting enables only registered systems to perform write operations. For a given disk, only one reservation can exist amidst numerous registrations.&lt;br /&gt;&lt;br /&gt;With SCSI-3 PR technology, blocking write access is as simple as removing a registration from a device. Only registered members can "eject" the registration of another member. A member wishing to eject another member issues a "preempt and abort" command. Ejecting a node is final and atomic; an ejected node cannot eject another node. In VCS, a node registers the same key for all paths to the device. A single preempt and abort command ejects a node from all paths to the storage device. &lt;br /&gt;&lt;br /&gt;Example for performing SCSI-3 PR reserve and eject:&lt;br /&gt;&lt;br /&gt;A good practice (used in SunCluster) is to use the machine IP as the registeration key. To obtain the key in hex format:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ gethostip -x $HOSTNAME&lt;br /&gt;7F000101&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Registering a key:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sg_persist --out --register --param-sark=7F000101 /dev/emcpowera1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reserving device:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sg_persist --out --reserve --param-rk=7F000101 --prout-type=3 /dev/emcpowera1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Repeat the key registeration for the peer node and try to preempt the device from the peer node:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ gethostip -x $HOSTNAME&lt;br /&gt;7F000102&lt;br /&gt;&lt;br /&gt;$ sg_persist --out --register --param-sark=7F000102 /dev/emcpowera1&lt;br /&gt;&lt;br /&gt;$ sg_persist --out --preempt --param-sark=7F000101 --param-rk=7F000102 --prout-type=5 /dev/emcpowera1&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-2149404344909837870?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/2149404344909837870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=2149404344909837870' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/2149404344909837870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/2149404344909837870'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2011/12/scsi-3-persistent-reservations.html' title='SCSI-3 persistent reservations'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-1072878668565352991</id><published>2011-12-18T16:09:00.006+02:00</published><updated>2011-12-18T17:55:35.587+02:00</updated><title type='text'>SCSI-2 Erlang port driver</title><content type='html'>&lt;head&gt;&lt;br /&gt;  &lt;p&gt;This is a sample C code that will use SCSI-2 capabilities to acquire/release a shared disk. The code is tested on Solaris 10.&lt;/p&gt;&lt;br /&gt;  &lt;p&gt;The application reads standard input as sent by the Erlang port driver. It can be tested separately with echo -e option with the first 2 bytes as the command length (in bytes) followed by the command number.&lt;/p&gt;&lt;br /&gt;  &lt;p&gt;To acquire disk lock use the own function, it forcibly break any previous ownership. Writes to disk are only allowed by the one holding the reservation. Similarly, a lock is released with the release function.&lt;/p&gt;&lt;br /&gt;  &lt;code&gt;echo -e '\x00\x01\x02' | app &lt;code&gt;&lt;br /&gt;&lt;/head&gt;&lt;br /&gt;&lt;body bgcolor="#ffffff" text="#000000"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;string.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;unistd.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;stropts.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;errno.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;fcntl.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;sys/mhd.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;sys/param.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;MACROS&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define PACKET   2  &lt;font color="#444444"&gt; /* 2 bytes length */&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define BUF_SIZE 256&lt;font color="#444444"&gt; /* Packet^Byte = 2^8 = 256 */&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define STATUS  1&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define OWN     2&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define RELEASE 3&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define REINSTATE_RESV_DELAY 0&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define MIN_OWNERSHIP_DELAY  1000 &lt;font color="#444444"&gt; /* 1 second */&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#define MAX_OWNERSHIP_DELAY  15000&lt;font color="#444444"&gt; /* 15 seconds */&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;TYPEDEF&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;typedef&lt;/strong&gt; &lt;strong&gt;unsigned&lt;/strong&gt; &lt;strong&gt;char&lt;/strong&gt; &lt;font color="#2040a0"&gt;byte&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;read_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;, &lt;font color="#2040a0"&gt;got&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;do&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;read&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;, &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;got&lt;/font&gt;, &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#2040a0"&gt;got&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;got&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;got&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;write_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;, &lt;font color="#2040a0"&gt;wrote&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;do&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;write&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;, &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;wrote&lt;/font&gt;, &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#2040a0"&gt;wrote&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;wrote&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;wrote&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;read_cmd&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;read_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;len&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#FF0000"&gt;8&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt; &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;read_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;write_cmd&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="#2040a0"&gt;li&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;li&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;len&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;8&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;write_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt;&lt;font color="#2040a0"&gt;li&lt;/font&gt;, &lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;li&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;write_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt;&lt;font color="#2040a0"&gt;li&lt;/font&gt;, &lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;write_exact&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;font color="#2040a0"&gt;len&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;Multihost&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;font color="#2040a0"&gt;control&lt;/font&gt; &lt;font color="#2040a0"&gt;operations&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;open_device&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;char&lt;/strong&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt; &lt;font color="#2040a0"&gt;device&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;open&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;device&lt;/font&gt;, &lt;font color="#2040a0"&gt;O_RDWR&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt; &lt;font color="#2040a0"&gt;O_NDELAY&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;Forcefully&lt;/font&gt; &lt;font color="#2040a0"&gt;acquires&lt;/font&gt; &lt;font color="#2040a0"&gt;exclusive&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;rights&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;multihost&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;strong&gt;for&lt;/strong&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;local&lt;/font&gt; &lt;font color="#2040a0"&gt;host&lt;/font&gt;. &lt;font color="#2040a0"&gt;Revokes&lt;/font&gt; &lt;font color="#2040a0"&gt;all&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;rights&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;multihost&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;font color="#2040a0"&gt;from&lt;/font&gt; &lt;font color="#2040a0"&gt;remote&lt;/font&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;hosts&lt;/font&gt;. &lt;font color="#2040a0"&gt;Causes&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;enter&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;exclusive&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;state&lt;/font&gt;.&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;own&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;struct&lt;/strong&gt; &lt;font color="#2040a0"&gt;mhioctkown&lt;/font&gt; &lt;font color="#2040a0"&gt;t&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;REINSTATE_RESV_DELAY&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#2040a0"&gt;MIN_OWNERSHIP_DELAY&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#2040a0"&gt;MAX_OWNERSHIP_DELAY&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;ioctl&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;, &lt;font color="#2040a0"&gt;MHIOCTKOWN&lt;/font&gt;, &lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt;&lt;font color="#2040a0"&gt;t&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;Probes&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;font color="#2040a0"&gt;multihost&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;determine&lt;/font&gt; &lt;font color="#2040a0"&gt;whether&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;local&lt;/font&gt; &lt;font color="#2040a0"&gt;host&lt;/font&gt; &lt;font color="#2040a0"&gt;has&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;rights&lt;/font&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt;. &lt;font color="#2040a0"&gt;Returns&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt; &lt;strong&gt;if&lt;/strong&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;local&lt;/font&gt; &lt;font color="#2040a0"&gt;host&lt;/font&gt; &lt;font color="#2040a0"&gt;has&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt;, &lt;font color="#FF0000"&gt;1&lt;/font&gt; &lt;strong&gt;if&lt;/strong&gt; &lt;font color="#2040a0"&gt;it&lt;/font&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;doesn&lt;/font&gt;'&lt;font color="#2040a0"&gt;t&lt;/font&gt;, &lt;font color="#2040a0"&gt;and&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt; &lt;font color="#2040a0"&gt;with&lt;/font&gt; &lt;font color="#2040a0"&gt;errno&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;EIO&lt;/font&gt; &lt;strong&gt;if&lt;/strong&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;probe&lt;/font&gt; &lt;font color="#2040a0"&gt;failed&lt;/font&gt; &lt;strong&gt;for&lt;/strong&gt; &lt;font color="#2040a0"&gt;some&lt;/font&gt; &lt;font color="#2040a0"&gt;other&lt;/font&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;reason&lt;/font&gt;.&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;status&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;ioctl&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;, &lt;font color="#2040a0"&gt;MHIOCSTATUS&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;Relinquishes&lt;/font&gt; &lt;font color="#2040a0"&gt;exclusive&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;rights&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;multihost&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;strong&gt;for&lt;/strong&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;localhost&lt;/font&gt;.&lt;br /&gt;// &lt;font color="#2040a0"&gt;On&lt;/font&gt; &lt;font color="#2040a0"&gt;success&lt;/font&gt;, &lt;font color="#2040a0"&gt;causes&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;disk&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;enter&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;non&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;exclusive&lt;/font&gt; &lt;font color="#2040a0"&gt;access&lt;/font&gt; &lt;font color="#2040a0"&gt;state&lt;/font&gt;.&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;release&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;ioctl&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;, &lt;font color="#2040a0"&gt;MHIOCRELEASE&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;argc&lt;/font&gt;, &lt;strong&gt;char&lt;/strong&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;argv&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;fn&lt;/font&gt;, &lt;font color="#2040a0"&gt;fd&lt;/font&gt;, &lt;font color="#2040a0"&gt;result&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;byte&lt;/font&gt; &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;BUF_SIZE&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;argc&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;abort&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;fd&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;open_device&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;argv&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;perror&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;open&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;abort&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;read_cmd&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;fn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;errno&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;switch&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fn&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#2040a0"&gt;STATUS&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;result&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;status&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;break&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#2040a0"&gt;OWN&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;result&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;own&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;break&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#2040a0"&gt;RELEASE&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;result&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;release&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;fd&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;break&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;result&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;strerror_r&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;errno&lt;/font&gt;, &lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;, &lt;strong&gt;sizeof&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;write_cmd&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;, &lt;font color="#FF0000"&gt;1&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;strlen&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;buf&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;EXIT_FAILURE&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;syntax highlighted by &lt;a href="http://www.palfrader.org/code2html"&gt;Code2HTML&lt;/a&gt;, v. 0.9.1&lt;br /&gt;&lt;/body&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-1072878668565352991?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/1072878668565352991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=1072878668565352991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1072878668565352991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1072878668565352991'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2011/12/scsi-2-ownrelease-driver.html' title='SCSI-2 Erlang port driver'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-3031784561549015044</id><published>2011-04-13T13:16:00.006+02:00</published><updated>2011-04-13T19:47:25.961+02:00</updated><title type='text'>Erlang logs and crashdump</title><content type='html'>While running the Erlang runtime in the daemon mode, the VM writes its log files in the log/ directory under the Erlang root directory "$ROOTDIR".&lt;br /&gt;&lt;br /&gt;The log files are named erlang.log.n and is rotated when it reaches the max configured size. The default maximum is 100KB which is rotated over 5 generations.&lt;br /&gt;&lt;div style="background-color: black; color: yellow; font-family: courier; font-weight:bold"&gt;&lt;br /&gt;root@erix-laptop:/usr/local/lib/erlang/log# ls&lt;br /&gt;erlang.log.2  erlang.log.3  erlang.log.4  erlang.log.5&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In many cases we will need to increase this number. This is fairly easy, just set the following shell variables. These variables can also be added to the "start" script to be used by the run_erl command.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;export RUN_ERL_LOG_GENERATIONS=10&lt;br /&gt;export RUN_ERL_LOG_MAXSIZE=1000000&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Check the values after starting the Erlang VM with os:getenv/1&lt;br /&gt;&lt;div style="background-color: black; color: yellow; font-family: Courier; font-weight:bold"&gt;&lt;br /&gt;1&amp;gt; os:getenv("RUN_ERL_LOG_GENERATIONS").&lt;br /&gt;"10"&lt;br /&gt;2&amp;gt; os:getenv("RUN_ERL_LOG_MAXSIZE").&lt;br /&gt;"1000000"&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-3031784561549015044?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/3031784561549015044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=3031784561549015044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/3031784561549015044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/3031784561549015044'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2011/04/reading-erlang-logs-and-crashdump.html' title='Erlang logs and crashdump'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-1236045461884955543</id><published>2009-11-21T11:26:00.001+02:00</published><updated>2009-11-21T23:27:34.975+02:00</updated><title type='text'>Object-Oriented ANSI C</title><content type='html'>&lt;div&gt;&lt;br /&gt;I used to know that Object Orietned programming is only available with C++/Java but not C. After thinking about it for some time, I found that it could be, I know that for C++/Java guys this doesn't look like Object Oriented programming, but lets give it a try!&lt;br /&gt;&lt;br /&gt;The code below uses function pointers to demonstrate "instantiating" a new object, followed by performing "member functions" on the object, and then deleting the object.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: 'Courier New';font-size: 9pt;color: #000000;white-space: pre; line-height: 1; background: #FFFFFF; "&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**********************************************************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/*                                                                    */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Object Oriented C !                                                */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/*                                                                    */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Advanced STRUCTURE simulating OO design using function pointers.   */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**********************************************************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc9" style="color: #804000;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc9" style="color: #804000;"&gt;#define delete(a) a-&amp;gt;finalize(a)&lt;br /&gt;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Define a car structure */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc5" style="color: #0000FF;font-weight: bold;"&gt;typedef&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;struct&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;car_st&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;struct&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;car_st&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;unsigned&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;int&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;bTurbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;:&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;1&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* 1-bit flag */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;unsigned&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;int&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;maxSpeed&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;unsigned&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;int&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;fuelLevel&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(*&lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(*&lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(*&lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(*&lt;/span&gt;&lt;span class="sc11"&gt;finalize&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)(&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;struct&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;car_st&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(*&lt;/span&gt;&lt;span class="sc11"&gt;funcPtrArr&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;2&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;])();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;};&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;puts&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc6" style="color: #808080;"&gt;"VooVooo"&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;puts&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc6" style="color: #808080;"&gt;"Fly baby ... fly"&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;puts&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc6" style="color: #808080;"&gt;"Race is over baby"&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/***********************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Simulate distructor */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/***********************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;void&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;finalize&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;car&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;free&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;car&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Simualting constructor */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/**************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Allocating &amp;amp; setting struct elements to Zero */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;calloc&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;1&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;,&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc5" style="color: #0000FF;font-weight: bold;"&gt;sizeof&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;)&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;finalize&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;finalize&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;funcPtrArr&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;0&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;]&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;funcPtrArr&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;1&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;]&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span class="sc5" style="color: #0000FF;font-weight: bold;"&gt;return&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/***********************************************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* Create instances of cars and try to use their functions */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc3" style="color: #008080;"&gt;/***********************************************************/&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;int&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;main&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;int&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;argc&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;,&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc16" style="color: #8000FF;"&gt;char&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;argv&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[])&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;{&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;CAR&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;*&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;newCar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;bTurbo&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;=&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;1&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;bTurbo&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;?&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;:&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;funcPtrArr&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;1&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;]();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;funcPtrArr&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;[&lt;/span&gt;&lt;span class="sc4" style="color: #FF8000;"&gt;0&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;]();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;start&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;bTurbo&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;?&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;turbo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;()&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;:&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sc11"&gt;stop&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;delete&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc11"&gt;porsche&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc11"&gt;delete&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc11"&gt;dawoo&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc11"&gt;getchar&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;();&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="sc5" style="color: #0000FF;font-weight: bold;"&gt;return&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc11"&gt;EXIT_SUCCESS&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;);&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sc10" style="color: #000080;font-weight: bold;"&gt;}&lt;/span&gt;&lt;span class="sc0"&gt; &lt;/span&gt;&lt;span class="sc1" style="color: #008000;"&gt;/* end main */&lt;/span&gt;&lt;span class="sc0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;The output of this code looks like&lt;br /&gt;&lt;br /&gt;VooVooo&lt;br /&gt;Race is over baby&lt;br /&gt;Race is over baby&lt;br /&gt;VooVooo&lt;br /&gt;VooVooo&lt;br /&gt;Fly baby ... fly&lt;br /&gt;&lt;/stdlib.h&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-1236045461884955543?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/1236045461884955543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=1236045461884955543' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1236045461884955543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1236045461884955543'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/object-oriented-ansi-c.html' title='Object-Oriented ANSI C'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-6608353704548114339</id><published>2008-05-10T14:17:00.004+03:00</published><updated>2008-05-10T14:51:30.151+03:00</updated><title type='text'>Ftp Scripting</title><content type='html'>Here we demonstrate some ways of doing Ftp within shell scripts and the famous problem of passing the password!&lt;br /&gt;&lt;br /&gt;First this an example using Here document:&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .mygeneral1-comment { color: #707070; font-style: italic; } .mygeneral1-currentline { color: #000000; } .mygeneral1-identifier { color: #000000; } .mygeneral1-keywords1 { color: #0000C0; } .mygeneral1-keywords2 { color: #008000; } .mygeneral1-keywords3 { color: #008000; } .mygeneral1-keywords4 { color: #000000; } .mygeneral1-keywords5 { color: #000000; } .mygeneral1-matchedbraces { color: #000000; } .mygeneral1-number { color: #FF0000; } .mygeneral1-preprocessor { color: #0000FF; } .mygeneral1-rightedge { color: #C0C0C0; } .mygeneral1-selection { color: #FFFFFF; } .mygeneral1-space { color: #000000; } .mygeneral1-string { color: #FF0000; } .mygeneral1-symbol { color: #0000C0; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:11;"  &gt;&lt;span class="mygeneral1-comment"&gt;#&lt;br /&gt;# Here document&lt;br /&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;ftp&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;vn localhost &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;!&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;user $USER $PASSWD&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;pwd&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;quit&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Another way using quote Ftp command:&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:11;"  &gt;&lt;span class="mygeneral1-keywords2"&gt;ftp&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;n &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;$&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;HOST &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;!&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;quote USER &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;$&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;USER&lt;br /&gt;quote PASS &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;$&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;PASSWD&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;pwd&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;quit&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The previous ways are good as long as we don't need to do some logic inside the Ftp connection, like for example looping or conditional statements.&lt;br /&gt;&lt;br /&gt;Instead, to able to do so, we have to use another method using "co-process" technique in the Korn shell (ksh) or of course Perl.&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:11;"  &gt;&lt;span class="mygeneral1-comment"&gt;#&lt;br /&gt;# Using co-process&lt;br /&gt;# The "|&amp;amp;" turns the process into a co-process that allows subsequent&lt;br /&gt;# "print -p" statements to send lines to the co-process standard-in and&lt;br /&gt;# "read -p" to read from its standard-out.&lt;br /&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;exec&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; 4&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;1&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;ftp&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;nv &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;4 2&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;4 &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;|&amp;amp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;print &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;p &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;open&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; localhost&lt;br /&gt;print &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;p user ericsson ericsson&lt;br /&gt;print &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;p &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;pwd&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;for&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; i &lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;in&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; 1 2 3   &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;do&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt;      print &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;p &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;pwd&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;done&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;print &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;-&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;p bye&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;wait&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;/code&gt;&lt;a href="http://www.inlumineconsulting.com:8080/website/scripting.ftp.html"&gt;&lt;code&gt;Inlumine Consulting&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;a href="http://www.unix.com/answers-frequently-asked-questions/14020-automate-ftp-scripting-ftp-transfers.html"&gt;Unix forums&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-6608353704548114339?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/6608353704548114339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=6608353704548114339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/6608353704548114339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/6608353704548114339'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2008/05/ftp-scripting.html' title='Ftp Scripting'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-7879604148645023400</id><published>2008-05-10T14:04:00.002+03:00</published><updated>2008-05-10T14:17:28.567+03:00</updated><title type='text'>In-Place String Filter</title><content type='html'>This C function would remove  from the source string "str" a set of characters that you supply to the it "delims".&lt;br /&gt;&lt;br /&gt;It returns a new string with out these characters, just like filtering the string.&lt;br /&gt;The filtering is done in place, meaning that only N memory is used in the processing.&lt;br /&gt;&lt;br /&gt;We first mark all occurrence of "delims" in "str" with nulls, then we concatenate the result to itself.&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { color: #0000FF; } .cpp1-character { color: #000000; } .cpp1-comment { color: #008080; font-style: italic; } .cpp1-float { color: #800080; } .cpp1-hexadecimal { color: #800080; } .cpp1-identifier { color: #000000; } .cpp1-illegalchar { color: #000000; } .cpp1-number { color: #800080; } .cpp1-octal { color: #800080; } .cpp1-preprocessor { color: #008000; } .cpp1-reservedword { color: #000000; font-weight: bold; } .cpp1-space { background-color: #FFFFFF; color: #000000; } .cpp1-string { color: #FF0000; } .cpp1-symbol { color: #000000; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font: 10pt Courier New;"&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; *removeCharsInPlace(&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;const&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; *str,&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;const&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; *delims)&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; * &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;const&lt;/span&gt;&lt;span class="cpp1-space"&gt; result = strdup(str);&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;const&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; srcStrLen = strlen(str);&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;const&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; delimsStrLen = strlen(delims);&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; i1, i2, j, tmp;&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Replace all the characters in 'result' string, which are like&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// delims chars with null&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(i1 = &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;; i1 &amp;lt; srcStrLen ; i1++) {&lt;br /&gt;       &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Loop through the 'delims' string&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-space"&gt; (i2 = &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;; i2 &amp;lt; delimsStrLen ; i2++) {&lt;br /&gt;           &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;if&lt;/span&gt;&lt;span class="cpp1-space"&gt; (result[i1] == delims[i2])&lt;br /&gt;              result[i1] = '\0';&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Loop through the 'result' string&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    j = &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;while&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(j &amp;lt; srcStrLen) {&lt;br /&gt;       &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Calculate the position of the next null&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(j; result[j] != '\0'; j++);&lt;br /&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Get the start of next string&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        j++;&lt;br /&gt;       tmp = j;&lt;br /&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Calculate next position to start search for the null&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        j += strlen(&amp;amp;result[j]);&lt;br /&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Append result to itself&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        strcat(result, &amp;amp;result[tmp]);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;return&lt;/span&gt;&lt;span class="cpp1-space"&gt; result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-7879604148645023400?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/7879604148645023400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=7879604148645023400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/7879604148645023400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/7879604148645023400'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2008/05/in-place-string-filter.html' title='In-Place String Filter'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-8779661650409683028</id><published>2007-10-24T12:14:00.000+02:00</published><updated>2007-11-07T15:07:05.733+02:00</updated><title type='text'>Bypassing Firewall</title><content type='html'>&lt;p&gt;We can use a proxy http server to view blocked sites by our firewall like Youtube or facebook, the remote proxy server is opened over the internet and will do the connection on behalf of us, then forward the requested page to us :)&lt;/p&gt;&lt;p&gt;Note that not all the web proxies supports javascript, this may prevent some pages from displaying correctly.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A good one is the &lt;a href="http://www.sloxy.com/"&gt;http://www.sloxy.com/&lt;/a&gt;, if we can access the proxy server then we can view whatever sites the server can access :)&lt;/p&gt;&lt;p&gt;To keep updated, we should frequently visit &lt;a href="http://www.freeproxysite.com/"&gt;http://www.freeproxysite.com/&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Another simple way if we only need to view a single link, like a Youtube link &lt;&lt;a href="http://www.youtube.com/watch?v=r43yCiKlbCo//n"&gt;http://www.youtube.com/watch?v=r43yCiKlbCo//n&lt;/a&gt;&gt;, just replace the URL with the IP &lt;&lt;a href="http://www.youtube.com/watch?v=r43yCiKlbCo//n"&gt;http://208.65.153.238/watch?v=r43yCiKlbCo//n&lt;/a&gt;&gt;. &lt;/p&gt;&lt;p&gt;To get the IP simply ping the host &lt;/p&gt;&lt;p&gt;$ ping www.youtube.com&lt;/p&gt;&lt;p&gt;if the ping is blocked, we can use a webping &lt;a href="http://www.fifi.org/services/ping"&gt;www.fifi.org/services/ping&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The above may not work for the messengers, To get the messengers working, we may use another 3rd parity program like &lt;a href="http://www.hopster.com/"&gt;www.hopster.com/&lt;/a&gt; that will connect to the MSN or other servers on behalf. One should read their privacy policy before using it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-8779661650409683028?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/8779661650409683028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=8779661650409683028' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/8779661650409683028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/8779661650409683028'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/10/bypassing-firewall.html' title='Bypassing Firewall'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-331871367059509099</id><published>2007-10-10T16:16:00.000+02:00</published><updated>2007-10-16T17:21:29.007+02:00</updated><title type='text'>Shell Clock</title><content type='html'>A useful clock that is displayed inside your terminal window, it displays the time on the top right edge of your terminal :)&lt;br /&gt;&lt;br /&gt;This is done by manipulating the terminal escape sequence, this could be done with any language but I will list here the shell script version (just to save compile effort).&lt;br /&gt;&lt;br /&gt;We can learn about terminal escape sequences using the dtterm manual pages ($ man -s5 dtterm), here we will use the "Esc 7" (DECSC), "Esc 8" (DECRC) and "Esc [ p1 ; p2 H" sequences.&lt;br /&gt;&lt;br /&gt;The "Esc 7" sequence is used to save cursor position, "Esc 8" is used to restore cursor position and "Esc [ p1 ; p2 H" is used to position the cursor as follows:&lt;br /&gt;A p1 value 0 or 1 moves the cursor to row one. A p1 value of N moves the cursor to row N.  A p2 value 0 or 1 moves the cursor to column one.  A p2 value of N moves the cursor to column N.&lt;br /&gt;&lt;br /&gt;Save the following shell code in a script called for example "clock" and run it in the background as follows&lt;br /&gt;&lt;br /&gt;$ clock &amp;amp;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .mygeneral1-comment { color: #707070; font-style: italic; } .mygeneral1-currentline { color: #000000; } .mygeneral1-identifier { color: #000000; } .mygeneral1-keywords1 { color: #0000C0; } .mygeneral1-keywords2 { color: #008000; } .mygeneral1-keywords3 { color: #008000; } .mygeneral1-keywords4 { color: #000000; } .mygeneral1-keywords5 { color: #000000; } .mygeneral1-matchedbraces { color: #000000; } .mygeneral1-number { color: #FF0000; } .mygeneral1-preprocessor { color: #0000FF; } .mygeneral1-rightedge { color: #C0C0C0; } .mygeneral1-selection { color: #FFFFFF; } .mygeneral1-space { color: #000000; } .mygeneral1-string { color: #FF0000; } .mygeneral1-symbol { color: #0000C0; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="FONT: 9pt Courier New"&gt;&lt;span class="mygeneral1-comment"&gt;#! /bin/sh&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;while&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;true&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;do&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-comment"&gt;# Get time&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; TIME&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;=$(&lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;date&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;+%&lt;/span&gt;&lt;span class="mygeneral1-identifier"&gt;T&lt;/span&gt;&lt;span class="mygeneral1-symbol"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-comment"&gt;# Save cursor position&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;printf&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-string"&gt;"\0337"&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="mygeneral1-comment"&gt;# Set color&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;printf&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-string"&gt;"\033[1;31m"&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="mygeneral1-comment"&gt;# Goto row 1, column 70&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;printf&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-string"&gt;"\033[1;70H$TIME"&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="mygeneral1-comment"&gt;# Restore cursor position&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;printf&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; &lt;/span&gt;&lt;span class="mygeneral1-string"&gt;"\0338"&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-space"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="mygeneral1-keywords2"&gt;sleep&lt;/span&gt;&lt;span class="mygeneral1-space"&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;span class="mygeneral1-keywords1"&gt;done&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-331871367059509099?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/331871367059509099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=331871367059509099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/331871367059509099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/331871367059509099'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/10/shell-clock.html' title='Shell Clock'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-779272946995038415</id><published>2007-10-10T14:59:00.000+02:00</published><updated>2007-10-10T16:27:55.540+02:00</updated><title type='text'>In-place String Reverse</title><content type='html'>This is an in-place function for reversing null terminated strings (in-place means that no additional space is required for the reverse process)&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { color: #0000FF; } .cpp1-character { color: #800000; } .cpp1-comment { color: #808080; font-style: italic; } .cpp1-currentline { color: #000000; } .cpp1-float { color: #FF0000; } .cpp1-hexadecimal { color: #FF0000; } .cpp1-identifier { color: #000080; } .cpp1-illegalchar { color: #FF00FF; } .cpp1-matchedbraces { color: #FF0000; } .cpp1-number { color: #FF0000; } .cpp1-octal { } .cpp1-preprocessor { color: #008080; } .cpp1-reservedword { color: #0000FF; font-weight: bold; } .cpp1-rightedge { color: #C0C0C0; } .cpp1-selection { color: #FFFFFF; } .cpp1-space { color: #000000; } .cpp1-string { color: #800000; } .cpp1-symbol { color: #808080; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="FONT: 8pt Courier New"&gt;&lt;span class="cpp1-comment"&gt;/***************************************/&lt;br /&gt;/* In-place reverse                    */&lt;br /&gt;/* Swap array elements (inner to outer)*/&lt;br /&gt;/* ex:   "abcde", "Rock"               */&lt;br /&gt;/* swap   adcbe    Rcok                */&lt;br /&gt;/* swap   edcba    kcoR                */&lt;br /&gt;/*                                     */&lt;br /&gt;/***************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;void&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;reverse&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;temp&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* right &amp;amp; left to be swapped */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;strlen&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;if&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;%&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;==&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;/&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;/&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;/&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;+&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;        &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;len&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;/&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/***************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Swap array elements (inner to outer)*/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/***************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;while&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;!=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;         &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;temp&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;         &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;         &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;str&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;temp&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;         &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;l&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;--;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;         &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;r&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;++;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;     &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;return&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-779272946995038415?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/779272946995038415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=779272946995038415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/779272946995038415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/779272946995038415'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/10/in-place-string-reverse.html' title='In-place String Reverse'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-5894478604543173588</id><published>2007-10-01T14:27:00.000+02:00</published><updated>2008-01-29T11:43:57.319+02:00</updated><title type='text'>UNIX Command Piping</title><content type='html'>It took me some time to master the "Piping" skills so I thought this would be useful to share.&lt;br /&gt;The following is a multi-piping program that connect any number of commands.&lt;br /&gt;&lt;br /&gt;Steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Calculate the number of needed pipes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create the pipes and note that all coming childs will inherit it (remember to close all the pipes in the parent).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fork a new child and redirect STDIN &amp;amp; STDOUT and note that first command should not redirect STDIN and last command should not redirect STDOUT.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Close all the pipes after redirection in child and repeat 3 until all commands are done.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Close all pipes in the parent.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Parent wait for the last child.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Usage: pipe cmd1 cmd2 cmd3 ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { color: #0000FF; } .cpp1-character { color: #800000; } .cpp1-comment { color: #808080; font-style: italic; } .cpp1-currentline { color: #000000; } .cpp1-float { color: #FF0000; } .cpp1-hexadecimal { color: #FF0000; } .cpp1-identifier { color: #000080; } .cpp1-illegalchar { color: #FF00FF; } .cpp1-matchedbraces { color: #FF0000; } .cpp1-number { color: #FF0000; } .cpp1-octal { } .cpp1-preprocessor { color: #008080; } .cpp1-reservedword { color: #0000FF; font-weight: bold; } .cpp1-rightedge { color: #C0C0C0; } .cpp1-selection { color: #FFFFFF; } .cpp1-space { color: #000000; } .cpp1-string { color: #800000; } .cpp1-symbol { color: #808080; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:8;"  &gt;&lt;span class="cpp1-preprocessor"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;main&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;argc&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;argv&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;envp&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nProcess&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;argc&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nProcess&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;int&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;];&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Pipe file descriptors&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pid_t&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pid&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;cmd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-number"&gt;20&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-string"&gt;"/bin/"&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-preprocessor"&gt;#ifdef DEBUG&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;printf&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-string"&gt;"Pipes: [%d] Process [%d]\n"&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nProcess&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-preprocessor"&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/********************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Create the pipes */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/********************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;&amp;lt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;++)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pipe&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Spawn child(s) for all processes */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nProcess&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;++)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-preprocessor"&gt;#ifdef DEBUG&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;printf&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-string"&gt;"Child [%d] spawned.\n"&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-preprocessor"&gt;#endif&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pid&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fork&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;if&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pid&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;==&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/***********************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*  -----------                   -----------  */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*   fd[j-2]   --&amp;gt; process --&amp;gt;   fd[j-1]   */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*  -----------                   -----------  */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/***********************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;if&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;!=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// First cmd should NOT redirect STDIN&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;dup2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-number"&gt;2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;],&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;STDIN_FILENO&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;if&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;!=&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nProcess&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;)&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;// Last cmd should NOT redirect STDOUT&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;dup2&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;-&lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;],&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;STDOUT_FILENO&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*************************************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Close unuseful file descriptors:                          */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* the pipe's writing and reading ends                       */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* (the latter is not needed anymore, after the duplication) */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*************************************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;&amp;lt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;++)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;close&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;    &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;close&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/**********************************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Append command to /bin/                                */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Child will have a separate (copy-on-write) copy of cmd */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/**********************************************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;strcat&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;cmd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;argv&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;execlp&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;cmd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;argv&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;j&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;],&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;char&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;*)&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;perror&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-string"&gt;"execlp"&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;   &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;exit&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* end Child section */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*****************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Parent code will follow   */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* If everything goes right! */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/*****************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;for&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;=&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;&amp;lt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;nPipes&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;++)&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;close&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt;  &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;close&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;fd&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;[&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;i&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;][&lt;/span&gt;&lt;span class="cpp1-number"&gt;1&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-symbol"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/****************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/* Wait for the last child! */&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-comment"&gt;/****************************/&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-identifier"&gt;waitpid&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;(&lt;/span&gt;&lt;span class="cpp1-identifier"&gt;pid&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;,&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-reservedword"&gt;return&lt;/span&gt;&lt;span class="cpp1-space"&gt; &lt;/span&gt;&lt;span class="cpp1-number"&gt;0&lt;/span&gt;&lt;span class="cpp1-symbol"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I have tested this code on Solaris and it worked properly!&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-5894478604543173588?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/5894478604543173588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=5894478604543173588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/5894478604543173588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/5894478604543173588'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/10/unix-command-multi-piping.html' title='UNIX Command Piping'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-4661596800175041621</id><published>2007-08-29T12:54:00.000+03:00</published><updated>2007-10-10T16:39:56.893+02:00</updated><title type='text'>Clear your Oracle database schema</title><content type='html'>Normally you don't need to clear your working schema, unless you are running test cases that need to update and refresh the data with each run.&lt;br /&gt;&lt;br /&gt;I use the following PL/SQL block to do this for me.&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .sql1-comment { color: #808080; font-style: italic; } .sql1-conditionalcomment { font-style: italic; } .sql1-currentline { color: #000000; } .sql1-datatype { color: #000000; font-weight: bold; } .sql1-defaultpackages { font-weight: bold; } .sql1-delimitedidentifier { } .sql1-exception { color: #FF0000; font-style: italic; } .sql1-function { color: #800000; font-weight: bold; } .sql1-identifier { color: #000080; } .sql1-matchedbraces { color: #FF0000; } .sql1-number { color: #FF0000; } .sql1-plsqlreservedword { font-weight: bold; } .sql1-reservedword { color: #000080; font-weight: bold; } .sql1-rightedge { color: #C0C0C0; } .sql1-selection { color: #FFFFFF; } .sql1-space { color: #000000; } .sql1-sqlpluscommand { font-weight: bold; } .sql1-string { color: #800000; } .sql1-symbol { color: #808080; } .sql1-tablename { } .sql1-variable { color: #000000; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="FONT: 9pt Courier New"&gt;&lt;span class="sql1-reservedword"&gt;DECLARE&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-comment"&gt;/* Variables to hold the result of the query */&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-identifier"&gt;t&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;user_tables&lt;/span&gt;&lt;span class="sql1-symbol"&gt;.&lt;/span&gt;&lt;span class="sql1-identifier"&gt;TABLE_NAME&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-symbol"&gt;%&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;TYPE&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;CURSOR&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;tablecursor&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-reservedword"&gt;is&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;select&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;table_namefrom&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;user_tables&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;BEGIN&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-identifier"&gt;OPEN&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;tablecursor&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;LOOP&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-comment"&gt;/* Retrieve each row of the result into PL/SQL variables */&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-identifier"&gt;FETCH&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;tablecursor&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;INTO&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;t&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-comment"&gt;/* If there are no more rows to fetch, exit the loop */&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;EXIT&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-reservedword"&gt;WHEN&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;tablecursor&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-symbol"&gt;%&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;NOTFOUND&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;EXECUTE&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-reservedword"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-string"&gt;'DROP TABLE "'&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;t&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-string"&gt;'"'&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;END&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-reservedword"&gt;LOOP&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-comment"&gt;/* Free cursor used by the query */&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-identifier"&gt;CLOSE&lt;/span&gt;&lt;span class="sql1-space"&gt; &lt;/span&gt;&lt;span class="sql1-identifier"&gt;tablecursor&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-reservedword"&gt;END&lt;/span&gt;&lt;span class="sql1-symbol"&gt;;&lt;/span&gt;&lt;span class="sql1-space"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="sql1-symbol"&gt;/&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-4661596800175041621?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/4661596800175041621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=4661596800175041621' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/4661596800175041621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/4661596800175041621'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/clear-your-oracle-database-schema.html' title='Clear your Oracle database schema'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-1356989787501354799</id><published>2007-08-24T11:27:00.001+03:00</published><updated>2007-10-04T16:49:16.809+02:00</updated><title type='text'>Displaying X-Window applications on a Windows client</title><content type='html'>To start displaying X-Window applications on your Windows system from a remote server, you need to have 2 things.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A remote telnet/SSH client&lt;/li&gt;&lt;li&gt;XWin Server &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The best available free tools are PuTTy and Cygwin/X, so lets see how this is done.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PuTTy X Window Configuration&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Install PuTTy from &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Start PuTTy. The PuTTy Configuration window will appear. Enter the hostname, select SSH and enter a Saved Sesssions name.&lt;/p&gt;&lt;p&gt;On Terminal -&gt; Keyboard, change the Backspace key select to Control-H.&lt;/p&gt;&lt;p&gt;On SSH, "Preferred SSH protocol version", check 2. &lt;/p&gt;&lt;p&gt;On SSH -&gt; Auth, check the Authentication parameters, "&lt;em&gt;Allow agent forwarding&lt;/em&gt;". &lt;/p&gt;&lt;p&gt;On SSH -&gt; Tunnels, check X11 forwarding "&lt;em&gt;Enable X11 forwarding&lt;/em&gt;" &lt;/p&gt;&lt;p&gt;On Session Click "Save" butter, the Saved Sesssions name will appear&lt;/p&gt;&lt;p&gt;When asked for "PuTTY Security Alert", please answer "Yes" to proceed. You will be asked only once in new configuration. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.msi.umn.edu/user_support/xclient/xwin_config.html"&gt;http://www.msi.umn.edu/user_support/xclient/xwin_config.html&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Cygwin/X&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To install click on the "Install Cygwin now" link on the &lt;a href="http://cygwin.com/"&gt;http://cygwin.com/&lt;/a&gt; web page. This downloads setup.exe to your system. Once you've downloaded setup.exe, run it and select "X11" and then click on the appropriate field until the above announced version number appears if it is not displayed already.&lt;br /&gt;&lt;br /&gt;After installation start the Cygwin and start xwin, the X-Window started within the PuTTy should now be displayed on your screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-1356989787501354799?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/1356989787501354799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=1356989787501354799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1356989787501354799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/1356989787501354799'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/displaying-x-window-applications-on.html' title='Displaying X-Window applications on a Windows client'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-7664036477730992351</id><published>2007-08-24T11:25:00.000+03:00</published><updated>2007-10-09T16:06:42.619+02:00</updated><title type='text'>Korn Shell Auto complete feature</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Had to work with the korn shell, I was missing the Bash auto complete "TAB" feature.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;u&gt;For Korn Shell try the following:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Filename completion&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ command + name(ESC + \)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Filelist completion&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ command + name(*)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Searching history&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:courier new;"&gt;$ (ESC + / + commandToSearchFor + ENTER)&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-7664036477730992351?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/7664036477730992351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=7664036477730992351' title='67 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/7664036477730992351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/7664036477730992351'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/korn-shell-auto-complete-feature.html' title='Korn Shell Auto complete feature'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>67</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-6328860143102340177</id><published>2007-08-23T15:31:00.000+03:00</published><updated>2007-10-04T16:25:21.709+02:00</updated><title type='text'>The Ten Commandments of Egoless Programming</title><content type='html'>&lt;p&gt;&lt;span style="font-family:verdana;"&gt;I was just passing by one of my colleagues desk at work when I found this note, a paper pinned up just behind his monitor.&lt;br /&gt;Reading the first point, I said WOW and I just couldn't help stopping until the last word.&lt;br /&gt;These really touched me, many points had something to do with me.&lt;br /&gt;Being a good programmer is not just as being the perfect coder, the "home alone" guy, some other important things like "Do you have personal discussions with your boss?", "Do you send funny mails?", "How often do you socialize at work place?", I even see some getting flowers at work.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;These terms were introduced in the book &lt;/span&gt;&lt;a href="http://www.amazon.com/Psychology-Computer-Programming-Silver-Anniversary/dp/0932633420/ref=sr_11_1/105-7053773-2983665?ie=UTF8&amp;amp;qid=1187876403&amp;amp;sr=11-1"&gt;&lt;span style="font-family:verdana;"&gt;The Psychology of Computer Programming&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, chapter 4, worth reading.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;1. Understand and accept that you will make mistakes. &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;2. You are not your code.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Remember that the entire point of a review is to find problems, and problems will be found. Don't take it personally when one is uncovered.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;3. No matter how much "karate" you know, someone else will always know more.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it's not needed.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;4. Don't rewrite code without consultation. &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;There's a fine line between "fixing code" and "rewriting code." Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;5. Treat people who know less than you with respect, deference, and patience. &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Nontechnical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don't reinforce this stereotype with anger and impatience.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;6. The only constant in the world is change.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, not as some serious inconvenience to be fought.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;7. The only true authority stems from knowledge, not from position.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Knowledge engenders authority, and authority engenders respect -- so if you want respect in an egoless environment, cultivate knowledge.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;8. Fight for what you believe, but gracefully accept defeat.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so" more than a few times at most, and don't make your dearly departed idea a martyr or rallying cry.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;9. Don't be "the guy in the room."&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;10. Critique code instead of people.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc. &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-6328860143102340177?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/6328860143102340177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=6328860143102340177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/6328860143102340177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/6328860143102340177'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/ten-commandments-of-egoless-programming.html' title='The Ten Commandments of Egoless Programming'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-8227721849347148679</id><published>2007-08-22T16:14:00.000+03:00</published><updated>2007-08-23T18:38:22.112+03:00</updated><title type='text'>Command history facilities for SQL*PLUS</title><content type='html'>&lt;span style="font-family:verdana;"&gt;The SQL*PLUS is a powerful tool for performing SQL and administration tasks, unfortunately it has no command facilities other than on Windows.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;If you are lucky enough to have the &lt;span style="font-family:courier new;"&gt;ied&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;utility&lt;/span&gt;&lt;/span&gt; in your UNIX system then try the following:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;$ ied sqlplus user/pass@db&lt;db&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;SQL&gt; [Escape-Key]&lt;/span&gt; + &lt;span style="font-family:courier new;color:#3366ff;"&gt;[K-Key] or [J-Key]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;ied is a utility that act as an interface between you and the sqlplus, providing most of the line editing and history functionality found in the Korn shell.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-8227721849347148679?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/8227721849347148679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=8227721849347148679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/8227721849347148679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/8227721849347148679'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/command-history-facilities-for-sqlplus.html' title='Command history facilities for SQL*PLUS'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-2117922717926340505</id><published>2007-08-21T18:07:00.001+03:00</published><updated>2007-08-22T17:59:47.713+03:00</updated><title type='text'>Connect to Exchange server over the Internet</title><content type='html'>&lt;span style="font-family:verdana;"&gt;This feature requires you to be using a Microsoft Exchange Server 2003 e-mail account.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;These steps are for connecting Microsoft Outlook to your Exchange server without using a virtual private network (VPN) or other security hardware to connect behind your organization's firewall. Your Exchange administrator must enable this feature first before you can use it. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;On the Tools menu, click E-mail accounts, select View or change existing e-mail accounts, click Next, select the Exchange e-mail account, and then click Change.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Click More Settings, then click the Connection tab.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Under Exchange over the Internet, select Connect to my Exchange mailbox using HTTP.&lt;br /&gt;To specify a proxy server, click Exchange proxy settings.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;So if your webmail is &lt;/span&gt;&lt;a href="https://xyz.com/exchange"&gt;&lt;span style="font-family:verdana;"&gt;https://xyz.com/exchange&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; then you need to use xyz.com as your proxy server.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-2117922717926340505?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/2117922717926340505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=2117922717926340505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/2117922717926340505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/2117922717926340505'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/connect-to-exchange-server-over.html' title='Connect to Exchange server over the Internet'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3120867527453654801.post-3642998415354766344</id><published>2007-08-21T16:25:00.000+03:00</published><updated>2007-08-30T13:01:28.357+03:00</updated><title type='text'>Friends Don't Let Friends Type Qwerty</title><content type='html'>&lt;p&gt;&lt;span style="font-family:verdana;"&gt;What is the QWERTY thing!?&lt;br /&gt;If you are one of those who code much every day, then this is a serious issue for you.&lt;br /&gt;Listen carefully; the keyboard layout (named QWERTY) we are using today was designed more than a 100 years ago, it was made to "slow" down the typist so that the typewriter won't get paper jam! It was taken as a standard for computers later.&lt;br /&gt;You won't be happy to know that such layout could (in fact it will) cause you a problem like hand's pain, RSI "Repetitive Strain Injury" or CTS "carpal tunnel syndrome".&lt;br /&gt;&lt;br /&gt;You could forget about all of these if you switch to the ANSI standard layout (named DVORAK after its inventor Dr. &lt;a title="August Dvorak" href="http://en.wikipedia.org/wiki/August_Dvorak"&gt;August Dvorak&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ornithopter.org/typing/"&gt;&lt;span style="font-family:verdana;"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 200px; CURSOR: hand" alt="" src="http://www.ornithopter.org/typing/friends-sm.gif" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; The &lt;a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard"&gt;Dvorak &lt;/a&gt;layout was designed to address the problems of inefficiency and fatigue which characterized the &lt;/span&gt;&lt;a title="QWERTY" href="http://en.wikipedia.org/wiki/QWERTY"&gt;&lt;span style="font-family:verdana;"&gt;QWERTY&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; keyboard layout. The QWERTY layout was introduced in the 1860s, being used on the first commercially-successful typewriter, the machine invented by &lt;/span&gt;&lt;a title="Christopher Sholes" href="http://en.wikipedia.org/wiki/Christopher_Sholes"&gt;&lt;span style="font-family:verdana;"&gt;Christopher &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Sholes&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. The QWERTY layout was designed so that successive keystrokes would alternate between sides of the keyboard so as to avoid jams.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://www.mwbrooks.com/dvorak/dvorkeys.pdf"&gt;Dvorak Layout Diagram&lt;/a&gt; (for printing)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;How to Remap Your Keyboard ?&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;XP&lt;/span&gt; &lt;/strong&gt;&lt;br /&gt;From the "Start" menu, select "Settings" and then "Control Panel". From the Control Panel, double-click on "Regional and Language Options", Click the 'Languages' tab&lt;br /&gt;Click the 'Details...' button to open the 'Text Services and Input Languages' window.&lt;br /&gt;Click 'Add...', In the 'keyboard layout/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;IME&lt;/span&gt;' &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;dropdown&lt;/span&gt; box, select "United States-Dvorak"&lt;br /&gt;Click 'OK' to close the 'Text Services and Input Languages' window. A little keyboard icon should show up on your task bar*.&lt;br /&gt;Click 'OK' to close the 'Regional and Language Options' window&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;X Window System&lt;br /&gt;&lt;/strong&gt;X Window System users (UNIX) can make the translation by running &lt;em&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;xmodmap&lt;/span&gt;&lt;/em&gt; on an appropriate &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;keysym&lt;/span&gt; file. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;On Linux; KDE allows you to do the same thing as described here for Windows XP with its control center, perhaps Gnome as well.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;On Solaris, there is already a keysym file for the Dvorak layout, so you can make it as:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;$ /usr/openwin/bin/xmodmap /usr/share/xmodmap/xmodmap.dvorak&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;If you want this setting to take effect with every reboot, you need to add it to the .xinitrc File.&lt;br /&gt;If a file named .xinitrc exists in your home directory, it will be used to start some initial X clients, e.g. the window manager and some xterms or a desktop environment like GNOME. The .xinitrc file is a shell script that contains the commands to do this. It is not necessary to put the usual #!/bin/sh in the first line and to set the executable bit on the file; xinit will still know how to run it through a shell.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;$ echo /usr/openwin/bin/xmodmap /usr/share/xmodmap/xmodmap.dvorak &gt;&gt; ~/.xinitrc&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Here are some platform-independent keysym. To use them, simply save the appropriate file and give it as an argument to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;xmodmap&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.mit.edu/people/jcb/Dvorak/dvorak-keyboard.txt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;keysym&lt;/span&gt; file for the Dvorak keyboard&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3120867527453654801-3642998415354766344?l=ayakout.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ayakout.blogspot.com/feeds/3642998415354766344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3120867527453654801&amp;postID=3642998415354766344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/3642998415354766344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3120867527453654801/posts/default/3642998415354766344'/><link rel='alternate' type='text/html' href='http://ayakout.blogspot.com/2007/08/friends-dont-let-friends-type-qwerty.html' title='Friends Don&apos;t Let Friends Type Qwerty'/><author><name>Ali</name><uri>http://www.blogger.com/profile/14330207495986388736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
