<?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-7367391901970940875</id><updated>2012-02-17T11:39:25.877+07:00</updated><category term='C++'/><category term='vi command'/><category term='scp'/><category term='GNU Linux'/><category term='vi'/><category term='command'/><category term='Beginning Linux Programming book'/><category term='Java'/><category term='E-Books'/><category term='Programming'/><category term='utilities'/><category term='OS'/><title type='text'>Mr. Green's Blog</title><subtitle type='html'>"Free Software and your freedom"</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></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-7367391901970940875.post-7684182881282997449</id><published>2011-06-01T16:00:00.005+07:00</published><updated>2011-06-02T20:01:33.204+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><title type='text'>เรื่องราวของ Windows OS</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://techgenie.com/wp-content/uploads/MS-Windows.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://techgenie.com/wp-content/uploads/MS-Windows.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;ไม่ได้เขียนบล็อกมานานแสนนานมากหลังจากช่วงปิดเทอมและสอบเสร็จ ปีนี้ขึ้นปีสามก็เรยคิดว่าน่าจะมีอะไรมาเขียนให้ผู้อ่าน อ่านกันบ้าง แล้วก็เทอมนี้เรียนวิชา ระบบปฏิบัติการกับอาจารย์ John เรยได้ความรู้มาอย่างมากมาย แต่วันนี้จะนำเสนอด้านอคติกับระบบปฏิบัติการ Window$ กันซักเล็กน้อย ฮ่าๆ&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a name='more'&gt;&lt;/a&gt; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;ระบบปฏิบัติการ Window$ เป็นอย่างไร&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ยอดเยี่ยมสำหรับการขายฮาร์ดแวร์ใหม่ๆ แต่ละเวอร์ชั่นใช้ทรัพยากรเป็นสองเท่า&lt;/li&gt;&lt;li&gt;มหัศจรรย์ในการรันไวรัส &lt;/li&gt;&lt;li&gt;แม้กระทั่งไมโครซอฟท์ออฟฟิศด้วยกันเองยังไม่สามารถเข้ากันได้กับเวอร์ชั่นก่อนหน้า ( ออฟฟิศ 2003 และ ออฟฟิศ 2007 เป็นตัวอย่าง)&amp;nbsp;&lt;/li&gt;&lt;li&gt;GUI ส่วนมากนำมาจาก MacIntosh และ MacIntosh ก็เอามาจาก X Windows&lt;/li&gt;&lt;li&gt;นำเอา Internet Explorer (IE) เข้าไปเป็นส่วนหนึ่งของระบบปฏิบัติการ เพื่อทำให้ผู้ใช้ที่ไม่รู้อิโหน่อิเน่ต้องใช้ IE และทำให้ Netscape สู้ไม่ได้และภายหลังฟื้นคืนจากความตายกลับมาเป็น Firefox มาต่อสู้กันเป็นสงครามเว็บเบราเซอร์&lt;/li&gt;&lt;li&gt;IE มีชื่อเสียงในด้านการไม่ทำตามข้อกำหนดของ HTML, CSS, หรือ JavaScript ให้เป็นไปตามมาตรฐานและเพิ่มเติมส่วนไม่มาตรฐานเข้าไปเป็นของตัวเอง&lt;/li&gt;&lt;li&gt;Window$ Vista เองก็ยังไม่สามารถรันซอฟท์แวร์ที่ใช้กับ Window$ XP ได้อย่างถูกต้องเหมาะสมในบางครั้ง&lt;/li&gt;&lt;li&gt;Window$ ME รันโปรแกรมได้อย่างผิดๆ ถูกๆ แม้กระทั่งแฟนๆ ของไมโครซอฟท์เองก็ยังเกลียด Window$ ME&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;ทำไมทุกคนยังใช้ Window$&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; การ์ดวิดีโอ, การ์ดไวเรส และอื่นๆ ไม่อาจทำงานได้กับระบบปฏิบัติการที่ไม่ใช่ Window$ เนื่องจาก Microsoft ใช้เทคนิคมาเฟีย (mafia-style) เพื่อที่จะกีดกันข้อกำหนดคุณลักษณะทางฮาร์ดแวร์ และกดหมาย USA IP จะฟ้องร้องบุคคลที่ใช้กระบวนการวิศวกรรมย้อนกลับ (reverse-engineer) &lt;/li&gt;&lt;li&gt;ไมโครซอฟท์จ่ายเงินให้กับผู้ผลิตซอฟท์แวร์ต่างๆ เพื่อที่จะผลิตซอฟท์แวร์เวอร์ชั่นสำหรับใช้บน Window$ เท่านั้น&lt;/li&gt;&lt;li&gt;ความเกรงกลัวที่จะใช้สภาพแวดล้อมบนเดสก์ท็อปใหม่ๆ (GNU/linux ใช้ยาก 555+)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;แต่กระนั้นฉันก็ยังต้องการ&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MSN chat - ใช้ Pidgin&lt;/li&gt;&lt;li&gt;MS Word - ใช้ LibreOffice, OpenOffice&lt;/li&gt;&lt;li&gt;MS Powerpoint - ใช้ Open Office Impress&lt;/li&gt;&lt;li&gt;MS Excel - ใช้ Open Office Calc&lt;/li&gt;&lt;li&gt;IE - Firefox (ไม่มีปัญหากับเว็บที่มีคุณภาพสูง และจะมีปัญหากับเว็บที่กากๆ เช่นต้องใช้เฉพาะ IE ในการรับชมหรือทำการธุรกรรมอะไรซักอย่าง)&amp;nbsp;&lt;/li&gt;&lt;li&gt;ดูหนังล่ะ - Xine, VLC, ฯลฯ&lt;/li&gt;&lt;li&gt;ฟังเพลง - Xine, Rhythmbox, Banshee, ฯลฯ&lt;/li&gt;&lt;li&gt;Photoshop/Illustrator - Gimp, Inkscape&lt;/li&gt;&lt;li&gt;สุดท้ายเล่นเกมส์ล่ะ - ไปซื้อเพลย์สเตชั่นสามมาเล่นไม่ดีกว่าเหรอ ฮ่าๆ&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: red;"&gt;เนื้อหาโดย Mr. John Gatewood Ham&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;หากจะถามว่าความคิดส่วนตัวของผมเป็นอย่างไรเกี่ยวกับระบบปฏิบัติการ Microsoft Windows&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ผมคิดว่าการที่ไมโครซอฟท์ใช้ซอฟท์แวร์ที่มีลิขสิทธ์เป็นของตนเอง (จำพวก MS Office และอื่นๆ ที่มาจากการซื้อขาย) และไม่เปิดเผยซอร์สโค๊ดนั้น เป็นเรื่องที่ไม่ผิดนะ เพราะว่าพวกเค้ามีสิทธิ์ในการทำอย่างนั้น (ยกเว้นหากมีการใช้อำนาจที่เรียกว่า ด้านมืด จำพวกทำสัญญาผูกมัดกันใต้โต๊ะ ระหว่างผู้ทำซอฟท์แวร์กับทำฮาร์ดแวร์ ไอแบบนี้น่าจับมาเผา ฮ่าๆ ล้อเล่นนะครับ) ลองสมมติว่า หากคุณคิดอะไรมาได้สักอย่างแล้วคุณอยากจะเปิดเผยให้คนอื่นรู้เหรอ ในขณะที่สิ่งที่คุณคิดมาได้ทำเงินกำไรมหาศาลให้กับคุณ (ผมคิดว่าตรงส่วนนี้หายากมากนะที่จะเปิดเผยสิ่งที่ตนคิดมา อย่างเช่น คนอย่างริชาร์ด สตอลแมน, ไลนัส โทรวัลด์ และบุคคลอื่นๆ ที่มีลักษณะนี้ แล้วไอพวกนี้มันเอาอะไรกินฟระ ทำให้คนอื่นใช้ฟรีๆ ฮ่าๆ) ดังนั้น หากคุณคิดว่าไม่พอใจคุณก็ไม่ต้องซื้อของเค้ามาใช้ หาทางเลือกอื่นมาทดแทน อย่างเช่นพวกซอฟท์แวร์เสรีต่างๆ หรือหากคุณพอใจที่จะใช้ของเค้าก็เป็นสิทธิ์ของคุณ (ไม่ว่าจะโดยวิธีไหนก็ตาม แต่เมืองไทยมักใช้กันฟรี ฮ่าๆ) &lt;br /&gt;&lt;br /&gt;แต่เนื่องจากการเรียนรู้ถึงระบบโครงสร้างของระบบปฏิบัติการผมคิดว่าตัวเลือกที่ดีคือการใช้ ซอฟท์แวร์ที่เปิดเผยซอร์สโค๊ด อย่างเช่น GNU/Linux นั่นหมายถึงว่า มันจะทำให้คุณมีอิสระในการสำรวจ แก้ไข ดัดแปลง (แม้กระทั่งสร้างระบบปฏิบัติการขึ้นมาใหม่ด้วยตัวคุณเองจาก ซอร์สโค๊ดที่มีอยู่ แต่นั่นหมายความว่าคุณต้องเก่งจริงๆ นะ ฮ่าๆ) โดยที่คุณไม่ต้องเริ่มจากศูนย์ (เก็บดอกไม้ในสวน ฮ่าๆ)&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-7684182881282997449?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/7684182881282997449/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/06/window-os.html#comment-form' title='3 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/7684182881282997449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/7684182881282997449'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/06/window-os.html' title='เรื่องราวของ Windows OS'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-2053541201144906139</id><published>2011-02-14T23:24:00.071+07:00</published><updated>2011-02-15T00:12:47.544+07:00</updated><title type='text'>พ้อยเตอร์อ้างอิง</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://morethanmachine.com/macdev/wp-content/uploads/2009/02/pointers1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://morethanmachine.com/macdev/wp-content/uploads/2009/02/pointers1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;สวัสดีครับท่านผู้อ่าน วันนี้ไปเจอการประกาศพารามิเตอร์ในหัวฟังก์ชันแบบแปลกๆ (จริงๆ มันก็ต้องแปลกซิหนอ เพิ่งเคยเห็นครั้งแรก ไม่แปลกซิแปลก ง่ะ งงสับสนภาษาตัวเอง) ในบทเรียนเรื่อง Binary Tree (หรือถ้าจะให้เรียกเป็นภาษาไทยเรา ก็คือ ต้นไม้แบบทวิภาค นั่นเอง แต่ฟังแล้วรู้สึกแหม่งๆ เรียกแบบเดิมดีกว่าเนาะ 55+) อันที่จริงแล้วเรื่องที่จะเสนอในวันนี้ก็คือเรื่องที่คล้ายๆ กันกับเรื่องในหัวข้อ &lt;a href="http://greenesses.blogspot.com/2010/12/reference-variables.html"&gt;ฟังก์ชันที่รับค่าแบบ reference&lt;/a&gt; ต่างกันตรงที่ว่าคราวนี้มาในเวอร์ชั่น&lt;/div&gt;&lt;div style="text-align: left;"&gt;ของ&lt;i&gt;พ้อยเตอร์อ้างอิง&lt;/i&gt; แต่เบื้องหลังหลักการทำงานก็มีหลักการเดียวกันแต่แค่เปลี่ยนเป็นพ้อยเตอร์อ้างอิงแทนที่จะเป็นตัวแปรอ้างอิงธรรมดา ทั่วๆ ไป ว่าไปแล้วก็มาดูโค๊ดตัวอย่างกันก่อนเลยดีฝ่า&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="Cpp" name="code"&gt;/* refToPtr.cpp */&lt;br /&gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int temp = 3;&lt;br /&gt;&lt;br /&gt;void refToPtr(int* &amp;amp;);&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;    int var = 1;&lt;br /&gt;    int* pVar = &amp;amp;var;&lt;br /&gt;    &lt;br /&gt;    cout &amp;lt;&amp;lt; "Address of var = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;var &amp;lt;&amp;lt; endl; &lt;br /&gt;    cout &amp;lt;&amp;lt; "Address of pVar = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;pVar &amp;lt;&amp;lt; endl;&lt;br /&gt;    cout &amp;lt;&amp;lt; "\nBefore call refToPtr() value of var = " &amp;lt;&amp;lt; var &amp;lt;&amp;lt; endl;&lt;br /&gt;    &lt;br /&gt;    refToPtr(pVar);&lt;br /&gt;&lt;br /&gt;    cout &amp;lt;&amp;lt; "\n\nAfter call refToPtr() value of var = " &amp;lt;&amp;lt; var &amp;lt;&amp;lt; endl;&lt;br /&gt;    &lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void refToPtr(int* &amp;amp;iampVar) {&lt;br /&gt;    cout &amp;lt;&amp;lt; "\nAddress of iampvar = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;iampVar;&lt;br /&gt;    &lt;br /&gt;    /* Because iampVar is alias of pVar&lt;br /&gt;     * so, both iampVar and pVar are the same pointer variable&lt;br /&gt;     * and stores address of var. &lt;br /&gt;     * By this way, we can use dereference with iampVar */&lt;br /&gt;&lt;br /&gt;    *iampVar = temp;&lt;br /&gt;} &lt;/pre&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div style="color: purple;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;อธิบายการทำงาน &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 7 &lt;/b&gt;ประกาศตัวแปร temp เป็นตัวแปรโกลบอลชนิด int และกำหนดให้มีค่าเท่ากับ 3&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 8&lt;/b&gt; ประกาศฟังก์ชันโปรโตไทป์ (เขียนแบบนี้ป่าวหว่า แต่ที่แน่ๆ ไม่ใช่โปรโตซัวแน่) โดยมีการรับพารามิเตอร์เป็นแบบพ้อยเตอร์อ้างอิงที่ชี้ไปยังชนิดตัวแปร int &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 12 - 13&lt;/b&gt; ประกาศตัวแปร var ชนิด int และตัวแปรพ้อยเตอร์ pVar ชี้ไปที่ตัวแปร var&amp;nbsp; &lt;br /&gt;&lt;b&gt;บรรทัดที่ 15 - 17&lt;/b&gt; แสดงค่าแอดเดรสของ var, pVar และแสดงค่าที่อยู่ภายในตัวแปร var ซึ่งก็คือ 1 ออกมา&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 19 &lt;/b&gt;เรียกฟังก์ชัน refToPtr พร้อมกับส่งพารามิเตอร์ pVar เข้าไปด้วย (จริงๆ มันก็ต้องส่งอยู่แล้วนิ ก็หัวฟังก์ชันมันออกแบบมาไว้แบบนั้นนิหนอ)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 27 &lt;/b&gt;แสดงค่าแอดเดรสของตัวแปร iampVar ออกมา ตรงนี้เองถ้าใครเอาโค๊ดนี้ไปรันก็จะพบว่า ค่าแอดเดรสของตัวแปร iampVar กับ pVar มีค่าเดียวกัน ดังนั้น เราก็สรุปได้ว่า iampVar กับ pVar คือตัวแปรพ้อยเตอร์ตัวแปรเดียวกันนั่นเอง&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;บรรทัดที่ 34 &lt;/b&gt;กำหนดให้ค่าที่เก็บอยู่ในตัวแปร temp ซึ่งก็คือ 3 ให้กับตัวแปรพ้อยเตอร์ iampVar ซึ่งกำหนดค่าแบบ dereference ก็คือเป็นการกำหนดค่าโดยอ้อมให้กับตัวแปร var จึงเป็นเหตุทำให้ตัวแปร var เปลี่ยนค่าจาก 1 มาเป็น 3 ใน &lt;b&gt;บรรทัดที่ 21&lt;/b&gt; นั่นเอง&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&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/7367391901970940875-2053541201144906139?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/2053541201144906139/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/02/blog-post.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2053541201144906139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2053541201144906139'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/02/blog-post.html' title='พ้อยเตอร์อ้างอิง'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-2234933162437213409</id><published>2011-02-04T22:12:00.011+07:00</published><updated>2011-02-07T19:51:03.195+07:00</updated><title type='text'>เปลี่ยนรูป keyboard กัน</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/th.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/th.png" /&gt;&lt;/a&gt;ไม่ชอบไอคอนคีย์บอร์ดเดิมๆ ของ fedora 13เลย จึงเปลี่ยนมาเป็นแบบใหม่ดูดีกว่าเดิมมากมายเลย วิธีการทำก็ไม่ยากมากมายอะไรซักเท่าไหร่ เพียงแต่ปัญหาตอนทำคือ ฝรั่งไม่ได้ทำไอคอนมาเพื่อของคนไทยเลยต้องมานั่งทำเอง (พูดเหมือนทำยากเลย 555+) เลยทำสำเร็จรูปไว้ให้แล้ว เอามาเปลี่ยนได้เลย มาดูขั้นตอนวิธีการเปลี่ยนกัน&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ตอนแรกเป็นแบบนี้&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/KeyboardIcon1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="31" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/KeyboardIcon1.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;จะเปลี่ยนให้เป็นแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/KeyboardIcon2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="28" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/KeyboardIcon2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;ขั้นแรกเลยดาวน์โหลดสองไฟล์นี้&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/us.png"&gt;us.png&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/th.png"&gt;th.png&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;จากนั้นจะย้ายหรือก็อปปี้ทั้งสองไฟล์ที่ดาวน์โหลดมาก็ตามแต่ ให้เอาไปวางไว้ที่ ~/.icons/flags&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #cc0000;"&gt;*หมายเหตุ : หากไม่พบไดเร็คทอรี่ flags ให้สร้างไดเร็คทอรี่นี้ขึ้นมาก่อน ภายใต้ไดเร็คทอรี่ ~/.icons&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;ขั้นตอนต่อไปคือ ให้กด Alt-F2 จากนั้นให้พิมพ์ &lt;b&gt;gconf-editor&lt;/b&gt; ลงไปในช่องและกด Run&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/RunApp.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/RunApp.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;จากนั้นจะพบกลับหน้าต่างแบบด้านล่างนี้&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/GconfEditor.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/GconfEditor.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;โดยในช่องด้านซ้ายมือให้คลิกขยายโดยเริ่มจาก &lt;b&gt;&lt;span style="color: #741b47;"&gt;desktop -&amp;gt; gnome -&amp;gt; peripherals -&amp;gt; keyboard -&amp;gt; indicator&lt;/span&gt;&lt;/b&gt; เมื่อทำตามแล้ว ภายในช่องทางด้านขวาให้ติ๊กเลือกที่&lt;span style="color: #741b47;"&gt; &lt;b&gt;showFlags&lt;/b&gt;&lt;/span&gt; และกดกากบาทปิดหน้าต่างนี้ไปได้เลย ก็เป็นอันเสร็จสิ้น&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-2234933162437213409?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/2234933162437213409/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/02/flag-icon-for-keyboard-layout.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2234933162437213409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2234933162437213409'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/02/flag-icon-for-keyboard-layout.html' title='เปลี่ยนรูป keyboard กัน'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-2598634245641484968</id><published>2011-01-29T12:14:00.026+07:00</published><updated>2011-02-15T00:03:02.505+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>โปรแกรม HostToIP</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/HostToIP.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/02/HostToIP.png" /&gt;&lt;/a&gt;เนื่องจากช่วงนี้ว่างจัด (อันที่จริงแล้ว งานมีมากมายดองเค็มไว้เยอะเหมือนกัน) จึงนั่งลองเขียนโปรแกรมแปลง host name เป็น IP address จุดประสงค์ก็เพื่อจะศึกษาพวก network programming นี่แหละหนอ ที่ต้องศึกษาก็เพราะมีวิชาเรียนที่ต้องเขียนโปรแกรมเกี่ยวกับ server/client แถมต้องเขียนด้วยภาษา C อีก พอไปดูโครงสร้างโปรแกรมแล้วรู้สึก [เห้ย ไรวะนี่ งง ]&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; ก็เลยต้องมาลองเขียนกับ Java ก่อนเพราะเห็นโครงสร้างของมันแล้วก็พอเข้าใจบ้าง บทความนี้ก็ไม่มีอะไรมากครับ เพื่อจะโชว์โปรแกรมเห่ยๆ ซักโปรแกรมฮ่าๆ หน้าตาโปรแกรมมันก็ประมาณนี้และครับ &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/HostToIP.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/HostToIP.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;กระผมก็เขียนเอง ไม่ได้ใช้ IDE ช่วยมันก็เลยเห่ยแบบที่เห็นนี่แหละเน้อ&amp;nbsp; &lt;br /&gt;&lt;br /&gt;ส่วนโปรแกรมลองเอาไปทดสอบกันได้&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/HostToIP.jar"&gt;ที่นี่&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;เลยครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-2598634245641484968?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/2598634245641484968/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/01/host-name-ip-address.html#comment-form' title='2 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2598634245641484968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2598634245641484968'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/01/host-name-ip-address.html' title='โปรแกรม HostToIP'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-5217788809189450871</id><published>2011-01-22T19:15:00.082+07:00</published><updated>2011-02-08T17:07:28.612+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><title type='text'>Compile/Run จาวากับ gedit</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;สืบเนื่องมาจากความขี้เกียจของคน เขียนในการเปิดเทอร์มินัลขึ้นมาและคอมไพล์ซอร์สโค๊ดจาวา จึงไปหาวิธีการคอมไพล์และรันจาวาใน gedit ซึ่งทำได้ไม่ยากเลยแต่ยุ่งยากซักเล็กน้อย (ตกลงมันยังไงหว่า 555+) บางคนอาจบอกว่าเขียนจาวาก็ เน็ตบีน อีคริปซิง่ายกว่าเป็นไหนๆ พิมพ์คำสั่งนิดเดียวก็ออโต้คอมพลีทมาเป็นประโยคเลย แต่เนื่องจากชอบจำคำสั่ง พอใช้เน็ตบีน อีคริป เสียนิสัยหมด จำไม่ได้เลย หลายคนนึกก็บอกก็ไปปิดออโต้คอมพลีทซิ มันจะยากอะไรหนอ คือ อันที่จริงแล้วเวลาเขียนแอพพลิเคชั่นอะไรที่เล็กๆ อย่าง hello world เนี่ย ข้าพเจ้าก็ขี้เกียจทำเป็นโปรเจ็คค้าบ 555+ พรรณามานานแล้ว มาเริ่มกันเลยดีกว่า&lt;/div&gt;&lt;br /&gt;1. เปิด gedit ขึ้นมา Applications -&amp;gt; Accessories-&amp;gt; gedit Text Editor&lt;br /&gt;2. ไปที่ Edit -&amp;gt; preferences -&amp;gt; plugins -&amp;gt; ติ๊กถูกในช่อง External Tools&lt;br /&gt;3. เมื่อติ๊กแล้วจะสามารถคลิกที่ปุ่ม Configure Plugin ได้ ให้คลิกที่ปุ่มนั้น&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit01.png" width="365" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. เมื่อคลิกที่ปุ่ม Configure Plugin จะปรากฎหน้าต่างตามด้านล่างนี้ จากนั้นให้คลิกที่ปุ่มตามภาพ&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. จะปรากฎหน้าต่างดังภาพด้านล่าง จากนั้นให้เปลี่ยนจาก New Tool ในช่อง Tools: เป็น Java Compile หรือตามแต่สะดวกโยธิน ในช่อง Edit: ให้คัดลอกโค๊ดด้านล่างรูปภาพนี้ จากนั้นที่ช่อง Shortcut Key ให้คลิกเมาส์ไปในช่องว่างเปล่าๆ นั้นหนึ่งครั้ง จากนั้นกดปุ่ม F2 เวลาคอมไพล์เราจะใช้ปุ่ม F2 (ท่านอาจจะใช้ปุ่มคีย์ลัดปุ่มอื่นก็ได้ตามสะดวก)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://angsila.cs.buu.ac.th/%7E52030937/MyBlog/Articles/2554/01/gedit03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;คัดลอกโค๊ดนี้ไปใส่ในช่อง Edit:&lt;br /&gt;&lt;br /&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: #741b47;"&gt;#Compiles the current open Java source file.&lt;/span&gt;&lt;br style="color: #741b47;" /&gt;&lt;span style="color: #741b47;"&gt;echo "Compiling: " $GEDIT_CURRENT_DOCUMENT_PATH&lt;/span&gt;&lt;br style="color: #741b47;" /&gt;&lt;span style="color: #741b47;"&gt;echo '--------------------'&lt;/span&gt;&lt;br style="color: #741b47;" /&gt;&lt;span style="color: #741b47;"&gt;javac $GEDIT_CURRENT_DOCUMENT_PATH&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://angsila.cs.buu.ac.th/%7E52030937/MyBlog/Articles/2554/01/gedit04.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;6. จากนั้นทำซ้ำขั้นตอนที่ 4 อีกครั้ง แต่ครั้งนี้เราจะเปลี่ยน New Tool ในช่อง Tools: เป็น Java Run (ท่านอาจเปลี่ยนเป็นชื่ออื่น ตามสะดวกโยธินท่านเลย) ในช่อง Edit: ก็ให้คัดลอกโค๊ดด้านล่างภาพนี้ไปใส่ จากนั้นช่อง Shortcut Key จะใช้ปุ่ม F3 ในการรัน ตามภาพด้านล่างนี้เลย&lt;br /&gt;&lt;span id="goog_1619612681"&gt;&lt;/span&gt;&lt;span id="goog_1619612682"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit04.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/gedit04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;คัดลอกโค๊ดนี้ไปใส่ในช่อง Edit:&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #741b47; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;java ${GEDIT_CURRENT_DOCUMENT_NAME%\.*}&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;7. ขั้นตอนสุดท้ายให้สร้างไฟล์ โดยตั้งชื่อไฟล์ว่า java_run จากนั้นให้คัดลอกโค๊ดมาใส่ในไฟล์&lt;br /&gt;&lt;div style="color: #741b47;"&gt;&lt;br /&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/bin/bash&lt;br /&gt;#To be used with gedit Tools to run a compiled Java source file.&lt;br /&gt;[[ $2 =~ "\w+" ]]&lt;br /&gt;cd $1&lt;br /&gt;java $BASH_REMATCH&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;จากนั้นบันทึกไฟล์นี้ไว้ในไดเร็คทอรี่ ~/.gedit&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #cc0000;"&gt;***หมายเหตุ: หากไม่มีไดเร็คทอรี่ชื่อ .gedit ต้องสร้างไดเร็คทอรี่นี้ก่อน &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;เป็นอันเสร็จสิ้นกระบวนความ ^_^&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-5217788809189450871?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/5217788809189450871/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/01/gedit.html#comment-form' title='1 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/5217788809189450871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/5217788809189450871'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/01/gedit.html' title='Compile/Run จาวากับ gedit'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-862510634370573318</id><published>2011-01-17T00:05:00.100+07:00</published><updated>2011-02-05T00:00:41.130+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><title type='text'>สร้างไฟล์ jar บน command-line</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/jar.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/jar.png" /&gt;&lt;/a&gt;ก่อนจะสร้างไฟล์ เรามาทำความรู้จักกับไฟล์ชนิดนี้กันก่อนซักเล็กน้อยว่ามันคืออะไร มีเอาไว้ทำอะไร มีประโยชน์อย่างไรบ้าง ไฟล์ jar คือไฟล์ที่มีนามสกุล .jar มีไว้สำหรับรวบรวม .class .java และ library ให้จัดเก็บอยู่ในไฟล์นามสกุล .jar (เหมือนกับการนำไฟล์ไปบีบอัดด้วย WinZip, WinRar และไฟล์ .jar ก็สามารถแตกไฟล์ออกมาได้ด้วย ซึ่งจริงแล้วๆ มันก็คือไฟล์บีบอัดดีๆ นี่เอง) มีประโยชน์มากสำหรับโปรแกรมเมอร์ที่พัฒนาแอพพลิเคชั่นขนาดใหญ่ และต้องการรวบรวมไลบรารี่ต่างๆ ที่เยอะแยะมากมายให้จัดเก็บเป็นที่ๆ เรายังสามารถนำแอพลิเคชั่นที่เราเขียนขึ้น มาเก็บรวบรวมไว้ในไฟล์ .jar และนำมารันใช้งานได้ (เครื่องที่รันต้องมี jre ติดตั้งไว้อยู่แล้ว ในที่นี้จะไม่พูดถึงการติดตั้ง) &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;เมื่อทราบถึงสรรพคุณของไฟล์ .jar กันคร่าวๆ แล้ว ก็ได้เวลาสร้างไฟล์ชนิดนี้กันแล้ว โดยผู้อ่านสามารถทดลองทำได้จากโค๊ดด้านล่างนี้ได้เลย ซึ่งเป็นโค๊ดสำหรับสร้างหน้าต่างแบบ GUI ง่ายๆ&lt;/div&gt;&lt;br /&gt;&lt;b&gt;SimpleWindow.java&lt;/b&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;/**&lt;br /&gt;    SimpleWindow.java&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;&lt;br /&gt;public class SimpleWindow extends JFrame {&lt;br /&gt;    public SimpleWindow() {&lt;br /&gt;        final int WINDOW_WIDTH = 350;&lt;br /&gt;        final int WINDOW_HEIGHT = 250;&lt;br /&gt;  &lt;br /&gt;        setTitle("A Simple Window");&lt;br /&gt;        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);&lt;br /&gt;        setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;        setVisible(true);&lt;br /&gt;    }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;SimpleWindowDemo.java&lt;/b&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;/**&lt;br /&gt;    SimpleWindowDemo.java&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;public class SimpleWindowDemo {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        SimpleWindow myWindow = new SimpleWindow();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ต่อมาให้เก็บโค๊ดไว้ในไดเร็คทอรี่ชื่อ simplewindow สมมติว่าของผมเก็บไว้ที่ /home/greenesses/Desktop/simplewindow ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/location.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/location.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจากว่าผมได้คอมไพล์ซอร์สโค๊ดสองไฟล์เป็นที่เรียบร้อยแล้วจึงมี SimpleWindow.class กับ SimpleWindowDemo.class ด้วยภายในไดเร็คทอรี่ ผู้อ่านก็สามารถทำได้โดยเข้าไปภายในไดเรคทอรี่ simplewindow และใช้คำสั่ง&lt;br /&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;javac *.java &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;เราต้องสร้างไฟล์เพิ่มมาหนึ่งไฟล์ โดยใช้ชื่อว่า manifest (จริงๆ แล้วชื่ออื่นก็ได้) โดยภายในไฟล์มีหน้าตาเป็นแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/manifest.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="84" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/manifest.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;จากนั้น  บันทึกไฟล์นี้ไว้ในไดเร็คทอรี่ simplewindow ที่เราต้องสร้างไฟล์ manifest นี้ขึ้นมาเพื่อทำให้ไฟล์ .jar มันสามารถรันได้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;*** คำเตือน:&lt;/span&gt;&lt;/b&gt; ไฟล์ manifest นี้ต้องจบด้วยการขึ้นบรรทัดใหม่เหมือนในภาพ (อันนี้อย่าถามว่าทำไมนะครับ ไม่ทราบเหมือนกันเพราะเว็บของ oracle (อีวิลมากมาย) เองมันก็บอกมาอย่างนี้ &lt;a href="http://download.oracle.com/javase/tutorial/deployment/jar/build.html"&gt;http://download.oracle.com/javase/tutorial/deployment/jar/build.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;ถึงตอนนี้เรามีไฟล์ครบตามต้องการและพร้อมที่จะทำไฟล์ .jar กันเป็นที่เรียบร้อยแล้วหนอ การทำไฟล์ .jar นั้นง่ายนิดเดียว โดยผมจะให้ไฟล์ .jar นี้มีชื่อว่า myWindow.jar ผมก็จะใช้คำสั่งดังนี้&lt;br /&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;jar cvfm myWindow.jar manifest *.java *.class&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;หากไม่ต้องการให้คนอื่นเห็นซอร์สโค๊ดของเราภายในไฟล์ myWindow.jar เราก็ไม่ต้องใส่ *.java ไปในคำสั่ง ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;jar cvfm myWindow.jar manifest *.class&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;อธิบายคำสั่งกันซักเล็กน้อย&lt;br /&gt;ออบชั่น cvfm มีไว้สำหรับดังนี้&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; สร้างไฟล์ .jar (จำเป็นต้องมี)&lt;/li&gt;&lt;li&gt;v&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; แสดงรายละเอียดในขณะสร้างไฟล์&lt;/li&gt;&lt;li&gt;f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; กำหนดชื่อไฟล์ .jar (จำเป็นต้องมี ซึ่งในที่นี้คือ myWindow)&lt;/li&gt;&lt;li&gt;m&amp;nbsp;&amp;nbsp;&amp;nbsp; นำข้อมูลจากไฟล์ manifest ที่เราสร้างมาใส่ไว้ในไฟล์ .jar (จำเป็นต้องมี หากเรา&amp;nbsp;&amp;nbsp; ต้องการทำให้ไฟล์ .jar สามารถรันได้)&lt;/li&gt;&lt;/ul&gt;เนื่องจากไฟล์ myWindow.jar ที่เราสร้างมานี้ เมื่อดับเบิ้ลคลิกไปยังไม่สามารถรันได้โดยอัตโนมัติ เราต้องทำการเอ็กซีคิวต์ให้กับไฟล์ก่อน โดย&lt;br /&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;chmod +x myWindow.jar&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;เท่านี้ก็ได้ไฟล์ .jar ที่สามารถรันได้แล้ว ลองทำกันดูครับ ^^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-862510634370573318?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/862510634370573318/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/01/jar-command-line.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/862510634370573318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/862510634370573318'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/01/jar-command-line.html' title='สร้างไฟล์ jar บน command-line'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-6424796303126620146</id><published>2011-01-06T03:16:00.150+07:00</published><updated>2011-02-05T00:27:07.250+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>รับค่า keyboard กับ Scanner</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/java.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/java.jpg" /&gt;&lt;/a&gt;บทความนี้เป็นการเปิดตัวบทความแรกที่เป็นเรื่องที่เกี่ยวข้องกับปัญหาของภาษา Java (ที่จริงเป็นปัญหาของตัวเองมากกว่า &amp;nbsp;ภาษาเค้าน่าจะทำมาดีนะ คนอื่นเค้าใช้กันอาจจะไม่มีปัญหา&amp;nbsp;555+) โดยเจ้าปัญหาที่ว่านี้ เป็นปัญหาที่เกี่ยวกับเรื่องของการรับค่าจากคีย์บอร์ดที่เกิดจากการใช้คลาส Scanner (หาวิธีอยู่นานจะทำอย่างไรให้มันรับค่าได้อย่างแบบที่ต้องการ)&amp;nbsp; ส่วนปัญหาที่ได้กล่าวมานี้จะเป็นอย่างไรนั้น มาติดตามกันเลย&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;br /&gt;ลองพิจารณาตัวอย่างโค๊ดด้านล่างนี้&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;import java.util.Scanner;&lt;br /&gt;&lt;br /&gt;public class InputProblem {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        int id;&lt;br /&gt;        double salary;&lt;br /&gt;        String name;&lt;br /&gt;&lt;br /&gt;        // Create an object called in of Scanner class to read input.&lt;br /&gt;        Scanner in = new Scanner(System.in);&lt;br /&gt;&lt;br /&gt;        // Get the user's id&lt;br /&gt;        System.out.print("Enter your id: ");&lt;br /&gt;        id = in.nextInt();&lt;br /&gt;&lt;br /&gt;        // Get the user's salary&lt;br /&gt;        System.out.print("Enter your salary: ");&lt;br /&gt;        salary = in.nextDouble();&lt;br /&gt;&lt;br /&gt;        // Get the user's name&lt;br /&gt;        System.out.print("Enter your name: ");&lt;br /&gt;        name = in.nextLine();&lt;br /&gt;  &lt;br /&gt;        // Display the information&lt;br /&gt;        System.out.println("Hello " + name + ". Your id is " + id + &lt;br /&gt;                           " and your salary is " + salary);&lt;br /&gt;    }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;ผลลัพธ์จากการรันโปรแกรม &lt;b&gt;InputProblem.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/inputProblem1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/inputProblem1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;อธิบายโปรแกรม&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;จากตัวอย่างการรันโปรแกรม เราจะเห็นว่าเมื่อเราป้อนเงินเดือน 50000.00 และกดเอ็นเทอร์ โปรแกรมจะข้ามการรับค่าในส่วนของ Enter your name ซึ่งปัญหานี้เนื่องมาจาก ความแตกต่างเล็กน้อยของเมธอด nextLine และเมธอดอื่นของคลาส Scanner เมื่อผู้ใช้กดคีย์ต่างๆ บนแป้นพิมพ์จะทำให้คีย์ที่ถูกกดนั้นถูกจัดเก็บไว้ในพื้นที่ของหน่วยความจำที่เราเรียกกันว่า&lt;b&gt; คียบอร์ดบัฟเฟอร์&lt;/b&gt; (ซึ่งมีลักษณะเป็นโครงสร้างแบบ queue หรือ FIFO ย่อมาจาก First-In-First-Out)&amp;nbsp; เมื่อมีการกดปุ่มเอ็นเทอร์จะทำให้อักขระ \n ถูกจัดเก็บไว้ในบัฟเฟอร์ จากโค๊ดบรรทัดที่ 15 มีการร้องขอให้ผู้ใช้ป้อนตัวเลขจำนวนเต็ม เมื่อผู้ใช้กดเอ็นเทอร์ เมธอด nextInt จะอ่าน 1111 จากบัฟเฟอร์นั้น และหยุดอ่านเมื่อพบอักขระ \n ทำให้ \n ไม่ได้ถูกอ่านจากบัฟเฟอร์ขึ้นมาด้วย ซึ่งทำให้ \n นั้นยังคงค้างเติ่งอยู่ในบัฟเฟอร์นั้น พอโปรแกรมรันมาถึงโค๊ดบรรทัดที่ 19 สืบเนื่องมาจากที่ \n ยังคงค้างอยู่ในบัฟเฟอร์ แต่!!! เมธอด nextDouble ได้ถูกออกแบบมาให้มันข้ามการอ่าน \n ที่อยู่ตำแหน่งเริ่มแรกในบัฟเฟอร์ และอ่าน 50000.00 มาจากบัฟเฟอร์ และหยุดอ่านเมื่อพบกับ \n ที่มาจากการกดเอ็นเทอร์ เช่นเดียวกัน เมื่อป้อน 50000.00 แล้วกดเอ็นเทอร์ \n ก็ยังคงค้างเติ่งอยู่ในบัฟเฟอร์ ที่นี้มาถึงประเด็นสำคัญตรงบรรทัดที่ 23 เนื่องจากว่า &lt;b&gt;เมธอด nextLine ไม่ได้ถูกออกแบบมาให้ข้ามการอ่าน \n ที่อยู่ ณ ตำแหน่งแรกเริ่มในบัฟเฟอร์ เมื่อเมธอด nextLine อ่านพบ \n ที่อยู่ ณ ตำแหน่งแรกเริ่มของบัฟเฟอร์ นั่นแสดงว่า ไม่มีอะไรจะให้มันอ่านค่าจากบัฟเฟอร์ หรือพูดได้อีกแบบว่าเป็นการสิ้นสุดการอ่านค่าจากบัฟเฟอร์นั้น&lt;/b&gt; ดังนั้นผู้ใช้จะไม่มีโอกาสได้ป้อนค่าที่ Enter your name เลยยยย &lt;b&gt;&lt;span style="color: #cc0000;"&gt;วิธีการแก้ปัญหา &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: black;"&gt;วิธีที่ง่ายที่สุดคือ เพิ่มโค๊ด in.nextLine(); แทรกระหว่าง เมธอด nextDouble กับ เมธอด nextLine อ่านแล้วอาจจะงง แทรกตรงไหน มาดูตัวอย่างเลยดีกว่า 555+&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="Java" name="code"&gt;import java.util.Scanner;&lt;br /&gt;&lt;br /&gt;public class SolvedInputProblem {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        int id;&lt;br /&gt;        double salary;&lt;br /&gt;        String name;&lt;br /&gt;&lt;br /&gt;        // Create an object called in of Scanner class to read input.&lt;br /&gt;        Scanner in = new Scanner(System.in);&lt;br /&gt;&lt;br /&gt;        // Get the user's id&lt;br /&gt;        System.out.print("Enter your id: ");&lt;br /&gt;        id = in.nextInt();&lt;br /&gt;&lt;br /&gt;        // Get the user's salary&lt;br /&gt;        System.out.print("Enter your salary: ");&lt;br /&gt;        salary = in.nextDouble();&lt;br /&gt;&lt;br /&gt;        // To get rid of remaining newline in the buffer&lt;br /&gt;        in.nextLine();&lt;br /&gt;&lt;br /&gt;        // Get the user's name&lt;br /&gt;        System.out.print("Enter your name: ");&lt;br /&gt;        name = in.nextLine();&lt;br /&gt;  &lt;br /&gt;        // Display the information&lt;br /&gt;        System.out.println("Hello " + name + ". Your id is " + id + &lt;br /&gt;                           " and your salary is " + salary);&lt;br /&gt;    }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;บันทึกโปรแกรมชื่อ SolvedInputProblem.java จากนั้นทำการคอมไพล์และรันโปรแกรมจะได้ผลลัพธ์ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/solvedInputProblem.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="147" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2554/01/solvedInputProblem.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-6424796303126620146?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/6424796303126620146/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2011/01/java.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/6424796303126620146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/6424796303126620146'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2011/01/java.html' title='รับค่า keyboard กับ Scanner'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-6127030212396542939</id><published>2010-12-16T12:18:00.029+07:00</published><updated>2011-02-05T00:30:41.499+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><title type='text'>ดูฮาร์ดแวร์ในอูบุนตู</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/hardware.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/hardware.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;หลายคนอาจจะอยากทราบว่า เราจะตรวจสอบอุปกรณ์ฮาร์ดแวร์ต่างๆ ที่มีอยู่ภายในเครื่อง บนเจ้า ubuntu ได้อย่างไรกันหนอ วันนี้คนเขียนก็มีโปรแกรมมาแนะนำให้กับผู้อ่าน ซึ่งโปรแกรมที่จะแนะนำนี้เป็นโปรแกรมที่ทำงานใน&amp;nbsp; command-line&amp;nbsp; (ลองเปลี่ยนจาก GUI มาเป็น Text โหมดกันดูบ้าง) โดยประสิทธิภาพในการทำงานของมันก็ไม่ได้ด้อยไปกว่าพวกกราฟฟิคโหมด(GUI) เลย เจ้าโปรแกรมตัวนี้มีชื่อว่า &lt;b&gt;lshw &lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;มาเริ่มกันเลย!!&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ขั้นแรก เปิด terminal ขึ้นมา โดย ไปที่เมนู&lt;span style="color: purple;"&gt;&amp;nbsp; Applications -&amp;gt; Accessories -&amp;gt;&lt;b&gt; Terminal&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;จากนั้นพิมพ์คำสั่ง&lt;/span&gt;&lt;/div&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;sudo lshw &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;หากโปรแกรม lshw ไม่ได้ติดตั้งไว้ในเครื่องของเรา เราต้องติดตั้งโปรแกรม โดยใช้คำสั่ง&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;sudo apt-get install lshw&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;หากโปรแกรมถูกติดตั้งไว้เรียบร้อยแล้ว เราจะเห็นว่าผลลัพธ์ที่แสดงออกมามีความยาวเกินหน้าจอใน terminal ดังนั้นเราจึงนำประโยชน์ของ pipe มาใช้ ในการแสดงผลลัพธ์ ดังนี้&lt;/span&gt;&lt;/div&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;sudo lshw | more&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;หากต้องการบันทึกผลลัพธ์ที่ได้ลงในไฟล์ที่ชื่อว่า myHardware ก็สามารถทำได้ดังนี้&lt;/span&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;sudo lshw &amp;gt; myHardware&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;หากต้องการบันทึกเป็นรูปแบบของ html ก็สามารถทำได้เช่นกัน&lt;/span&gt;&lt;br /&gt;&lt;table style="border: 1px dotted purple; color: purple; font-size: 12px; height: 19px; margin-left: 0px; margin-right: 0px; text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;sudo lshw -html &amp;gt; myHardware.html&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-6127030212396542939?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/6127030212396542939/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/12/hardware-ubuntu.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/6127030212396542939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/6127030212396542939'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/12/hardware-ubuntu.html' title='ดูฮาร์ดแวร์ในอูบุนตู'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-2269383220942659531</id><published>2010-12-09T08:37:00.015+07:00</published><updated>2011-02-05T00:23:01.793+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><title type='text'>GNU/Linux คืออะไร</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/GNU-Linux.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/GNU-Linux.png" /&gt;&lt;/a&gt;&lt;/div&gt;หลายคนอาจเคยได้ยิน GNU/Linux แล้วอาจสงสัยว่ามันต่างกันยังไงกับ Linux เอ๊ะ มันคือระบบปฏิบัติการตัวเดียวกันหรือเปล่า? หรือมันเป็นระบบปฏิบัติการคนละตัวกัน ตกลงมันเป็นอะไร อย่างไหนกันแน่ บทความนี้อาจจะทำให้เข้าใจความแตกต่างหลักๆ ขึ้นมาบ้างว่า GNU มีความเกี่ยวข้องอะไรกันกับ Linux&lt;br /&gt;&lt;br /&gt;โครงการ GNU Linux กำเนิดมาเพื่อพัฒนาระบบปฏิบัติการแบบ Unix-like (ระบบปฏิบัติการที่คล้ายกับ Unix) ซึ่งมีซอร์สโค๊ดที่สามารถนำมาคัดลอก ดัดแปลง และนำมาแจกจ่ายใหม่ได้ Richard Stallman ได้เปิดตัวโครงการ GNU Linux ในปี 1983 และก่อตั้งมูลนิธิซอฟท์แวร์เสรีขึ้นกับคนกลุ่มหนึ่งในปี 1985&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ระบบปฏิบัติการ Linux ที่เรารู้จักกันนั้น คือส่วนที่เป็น kernel แต่ส่วนประกอบ (พวกแอพพลิเคชั่นต่างๆ คอมไพเลอร์) แทบทั้งหมดเป็นของ GNU ดังนั้นหลายคนๆ เชื่อว่าเราควรจะเรียกรวมกันว่า GNU/Linux หรือ GNU Linux&lt;br /&gt;&lt;br /&gt;GNU ย่อมาจาก GNU's not Unix &lt;br /&gt;&lt;br /&gt;ใครสนใจเรื่องของ GNU ติดตามได้ที่&lt;i&gt; &amp;gt;&amp;gt; &lt;a href="http://www.gnu.org/"&gt;&lt;span id="main" style="visibility: visible;"&gt;&lt;span id="search" style="visibility: visible;"&gt;&lt;span class="f"&gt;&lt;cite&gt;www.gnu.org&lt;/cite&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="main" style="visibility: visible;"&gt;&lt;span id="search" style="visibility: visible;"&gt;&lt;span class="f"&gt;&lt;cite&gt;&lt;/cite&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="main" style="visibility: visible;"&gt;&lt;span id="search" style="visibility: visible;"&gt;&lt;span class="f"&gt;&lt;cite&gt;&lt;/cite&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;ความแตกต่างระหว่าง free software และ open source &amp;gt;&amp;gt; &lt;a href="http://www.gnu.org/philosophy/free-software-for-freedom.html"&gt;อ่านที่นี่&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-2269383220942659531?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/2269383220942659531/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/12/gnulinux.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2269383220942659531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/2269383220942659531'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/12/gnulinux.html' title='GNU/Linux คืออะไร'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-3195293818123701127</id><published>2010-12-07T01:56:00.025+07:00</published><updated>2011-02-15T00:14:14.740+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>function ที่รับค่าแบบ Reference</title><content type='html'>&lt;div style="text-align: justify;"&gt;บทความนี้จะเกี่ยวกับเรื่องของ ฟังก์ชันที่มีการรับค่าแบบตัวแปรอ้างอิง ( reference variables ) (เขียนโปรแกรมมาตั้งแต่ปีหนึ่งมา เพิ่งมาเจอเอาตอนปีสอง เลยเอามาเขียนสรุปๆ ลงบล็อกไว้กันลืม) หน้าตามันจะเป็นอย่างไร มีความพิเศษยังไง แตกต่างจากฟังก์ชันอื่นๆ อย่างไร เอาไว้ทำอะไรบ้าง มีประโยชน์อย่างไร ลองอ่านกันเลย&amp;nbsp; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;มองภาพรวมก่อน&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;การผ่านค่าของตัวแปรให้กับฟังก์ชัน มีด้วยกันนั้นมีสองแบบ คือ&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;pass-by-value&lt;/li&gt;&lt;li&gt;pass-by-reference&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;ความแตกต่างระหว่าง pass-by-value กับ pass-by-reference&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="font-family: inherit; text-align: left;"&gt;ง่ายๆ เลย pass-by-value เป็นการผ่านค่าจริงๆ ของตัวแปร ส่วน pass-by-reference เป็นการผ่าน address ของตัวแปร&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;มาดูตัวอย่างการผ่านแบบ pass-by-value และ pass-by-reference ในโปรแกรมเดียวกัน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="Cpp" name="code"&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;char changeVal(char);&lt;br /&gt;void changeRef(char &amp;amp;);&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;    char letter = 'A';&lt;br /&gt; &lt;br /&gt;    cout &amp;lt;&amp;lt; "\nOriginal value\n";&lt;br /&gt;    cout &amp;lt;&amp;lt; "letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt; &lt;br /&gt;    cout &amp;lt;&amp;lt; "\nPass-by-value\n";&lt;br /&gt;    letter = changeVal(letter);&lt;br /&gt;    cout &amp;lt;&amp;lt; "Now letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt; &lt;br /&gt;    cout &amp;lt;&amp;lt; "\n\nPass-by-Reference\n";&lt;br /&gt;    changeRef(letter);&lt;br /&gt;    cout &amp;lt;&amp;lt; "Now letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char changeVal(char l) {&lt;br /&gt;    l = 'B';&lt;br /&gt;    return l;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void changeRef(char &amp;amp;ch) {&lt;br /&gt;    ch = 'C';&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;จากโค๊ดข้างบนนี้ &lt;b&gt;บรรทัดที่ 14 &lt;/b&gt;เป็นการส่งค่าภายในตัวแปร letter ซึ่งก็คือ A ให้กับฟังก์ชัน changeVal() จากนั้นค่า A จะถูกก็อปปี้มาเก็บไว้ในตัวแปร l &lt;b&gt;บรรทัดที่ 25 &lt;/b&gt;มีการกำหนดค่า B ให้แก่ตัวแปร l จากนั้นคืนค่า B กลับไปยัง ณ ตำแหน่งที่เรียกใช้ฟังก์ชัน changeVal() พร้อมกับนำค่า B มาเก็บไว้ในตัวแปร letter ณ ตอนนี้ ค่าภายในตัวแปร letter ได้เปลี่ยนจาก A มาเป็น B เรียบร้อยแล้ว&amp;nbsp;   ส่วน&lt;b&gt;บรรทัดที่ 18&lt;/b&gt; มีหลักการทำงานคล้ายๆ กัน เพียงแต่ว่า ตัวแปร letter ไม่ได้ส่งค่าของตัวแปรมาให้แก่ฟังก์ชัน changeRef() นั่นก็คือว่า ไม่ได้ส่งค่า B มาให้นั่นเอง เนื่องจากว่า พารามิเตอร์ของฟังก์ชัน changeRef() ถูกประกาศเป็น reference parameter (ตัวแปรพารามิเตอร์แบบอ้างอิง) &lt;span style="color: purple; font-size: small;"&gt;&lt;b&gt;แล้วมัน หมายความว่ายังไงล่ะ!!! &lt;span style="color: black;"&gt;หมายความว่าตัวแปร letter กับ ตัวแปร ch เป็นตัวแปรเดียวกัน ตัวแปรเดียวกันจริงๆ แต่เพียงคนละชื่อ (เหมือนกับเป็น ชื่อเล่น แทนชื่อจริงนั่นแหละ เราอ้างถึงคนคนเดียวกัน แต่คนละชื่อ) ถ้าจะพูดให้ถูกก็คือว่า ตัวแปรสองตัวนี้อ้างอิงถึงตำแหน่งเดียวกันในหน่วยความจำ อ่าว! ยังไง หลายคนอาจจะสงสัย ถ้ายังงั้น&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;span style="color: purple; font-size: small;"&gt;แล้วจะเอาอะไรมาพิสูจน์ว่ามันเป็นตัวแปรเดียวกันล่ะ???&lt;/span&gt;&lt;/b&gt; &lt;span style="font-size: small;"&gt;วิธีที่จะทราบว่า letter กับ ch เป็นตัวแปรเดียวกัน คือ เราต้องสั่งแสดงค่า address ของตัวแปรทั้งสองตัว ตามโค๊ดด้านล่างนี้&lt;/span&gt;&amp;nbsp;&lt;/span&gt; &lt;br /&gt;&lt;pre class="Cpp" name="code"&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;char changeVal(char);&lt;br /&gt;void changeRef(char &amp;amp;);&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;    char letter = 'A';&lt;br /&gt;    cout &amp;lt;&amp;lt; "\nOriginal value\n";&lt;br /&gt;    cout &amp;lt;&amp;lt; "\nAddress of letter = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;letter &amp;lt;&amp;lt; endl;&lt;br /&gt;    cout &amp;lt;&amp;lt; "letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt; &lt;br /&gt;    cout &amp;lt;&amp;lt; "\nPass-by-value\n";&lt;br /&gt;    letter = changeVal(letter);&lt;br /&gt;    cout &amp;lt;&amp;lt; "Now letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt; &lt;br /&gt;    cout &amp;lt;&amp;lt; "\n\nPass-by-Reference\n";&lt;br /&gt;    changeRef(letter);&lt;br /&gt;    cout &amp;lt;&amp;lt; "Now letter = " &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl;&lt;br /&gt; &lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char changeVal(char l) {&lt;br /&gt;    cout &amp;lt;&amp;lt; "Address of l = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;l &amp;lt;&amp;lt; endl;&lt;br /&gt;    l = 'B';&lt;br /&gt;    return l;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void changeRef(char &amp;amp;ch) {&lt;br /&gt;    cout &amp;lt;&amp;lt; "Address of ch = " &amp;lt;&amp;lt; (unsigned long) &amp;amp;ch &amp;lt;&amp;lt; endl;&lt;br /&gt;    ch = 'C';&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;ผลลัพธ์จากการรันโปรแกรม&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/passByValByRef.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/12/passByValByRef.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;จากการรันโปรแกรมจะเห็นว่า ตำแหน่งของตัวแปร letter กับ ตำแหน่งของตัวแปร ch เป็นตำแหน่งเดียวกัน นั่นคือ 3220023647 (ตำแหน่งแอดเดรสสที่ได้ของท่านอาจแตกต่างกันออกไป)  พอมาถึงตรงนี้ แล้วเราจะทำ reference variable ไปทำไม ก็ในเมื่อมันก็ใช้ได้เหมือนกันกับตัวแปรธรรมดา จริงอยู่ถ้าทำตัวแปรเดียวมันไม่มีประโยชน์เลย ที่จะมาใช้ไอ &amp;amp; ตัวเนี้ย (จริงๆ ถึงจะใช้แค่ตัวแปรเดียว แต่ถ้าส่ง object เข้ามาแล้วหาก object มันมี attribute มาก จะมีประโยชน์มาก เพราะถ้าส่งแบบ pass-by-value จะเสียพื้นที่หน่วยความจำในการก็อปปี้ค่ามาใช้ในฟังก์ชันที่ถูกเรียกเป็นจำนวนมากขึ้น ตามจำนวน attribute ของ object นั้นๆ ในทางการเขียนโปรแกรมจริงๆ มันจึงมีประโยชน์มาก เพราะ attribute ของ object หนึ่งๆ มักจะมีจำนวนมาก)&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;ประโยชน์ของ reference variable &lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;มีประโยชน์ตอนคืนค่าจากฟังก์ชัน ซึ่งปกติเราสามารถคืนค่าจากฟังก์ชันได้เพียงค่าเดียว แต่ถ้าเป็น reference variable สามารถคืนค่าได้หลายค่า&lt;/li&gt;&lt;li&gt;ประหยัดพื้นที่หน่วยความจำ เพราะตัวแปรไม่ได้ถูกคัดลอกเหมือนกับการส่งแบบ pass-by-value (ยิ่งส่งตัวแปรเข้าฟังก์ชันมาก ยิ่งใช้พื้นที่หน่วยความจำมาก หากใช้การส่งแบบ pass-by-value)&lt;/li&gt;&lt;li&gt;กรณีที่ต้องการเปลี่ยนแปลงค่า จากฟังก์ชันที่ถูกเรียกให้มีผลต่อฟังก์ชันที่เรียกโดยตรง&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-3195293818123701127?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/3195293818123701127/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/12/reference-variables.html#comment-form' title='3 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/3195293818123701127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/3195293818123701127'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/12/reference-variables.html' title='function ที่รับค่าแบบ Reference'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-1113133614050039363</id><published>2010-12-04T15:01:00.009+07:00</published><updated>2011-02-05T12:48:21.597+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='E-Books'/><title type='text'>Linux System Programming</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.coverbrowser.com/image/programming-books/103-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.coverbrowser.com/image/programming-books/103-1.jpg" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;มีหนังสือใหม่มาอัพเดตกันอีกแล้ว คนเขียนไปขุ้ยมาจาก Google ไม่รู้ว่าเนื้อหาข้างในเป็นยังไงบ้าง หนังสือเล่มนี้น่าจะเป็นแนวทางในการเรียนรู้การเขียนโปรแกรมเกี่ยวกับระบบบนลินุกซ์ได้บ้าง (ไม่มากก็น้อย เหอะๆ เหมือนเขียนคำนำรายงานตอนมัธยมยังไงก็ไม่รู้ 555+) น่าจะเป็นประโยชน์สำหรับความรู้เพิ่มเติมจากการเรียนภายในห้องเรียนได้ เพื่อนๆ ลองโหลดไปอ่านกันได้เลย &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a href="http://www.mediafire.com/?kk5x596ph9b8cqb"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Download Here&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: #cc0000; font-size: x-small;"&gt;**ปล ลิงค์เน่าบอกได้นะครับ &lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span id="goog_419697556"&gt;&lt;/span&gt;&lt;span id="goog_419697557"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-1113133614050039363?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/1113133614050039363/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/12/linux-system-programming.html#comment-form' title='2 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/1113133614050039363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/1113133614050039363'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/12/linux-system-programming.html' title='Linux System Programming'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-31540503078058878</id><published>2010-11-27T23:08:00.023+07:00</published><updated>2011-02-05T12:55:55.232+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><title type='text'>ทำ Hard Links และ Symbolic Links</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/11/HardSymLinks" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="107" src="http://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/11/HardSymLinks" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;ทุกๆ ไฟล์บนระบบ Unix, GNU/Linux จะเชื่อมโยงกันกับตารางหนึ่งซึ่งเรียกว่า&lt;b&gt; inode&lt;/b&gt; (ย่อมากจาก index node) inode นี้จะสามารถเข้าถึงผ่านทาง &lt;b&gt;inode number&lt;/b&gt; และ inode จะเก็บคุณสมบัติต่างๆ ของไฟล์ไว้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ชนิดไฟล์ (ทั่วไป, ไดเร็คทอรี่, อุปกรณ์ , ฯลฯ)&lt;/li&gt;&lt;li&gt;สิทธิในการเข้าถึงไฟล์&lt;/li&gt;&lt;li&gt;จำนวนของลิงค์ (จำนวนของชื่อฉายาที่ไฟล์นั้นมี)&lt;/li&gt;&lt;li&gt;UID ของ owner&lt;/li&gt;&lt;li&gt;GID ของ group owner&lt;/li&gt;&lt;li&gt;ขนาดของไฟล์ในรูปของ ไบท์&lt;/li&gt;&lt;li&gt;วันและเวลาของการดัดแปลงแก้ไขครั้งล่าสุด&lt;/li&gt;&lt;li&gt;วันและเวลาที่เข้าถึงไฟล์ครั้งล่าสุด&lt;/li&gt;&lt;li&gt;วันและเวลาที่เปลี่ยน inode ครั้งล่าสุด&lt;/li&gt;&lt;li&gt;อาเรย์ของพ้อยเตอร์ที่เก็บบล็อกจานแม่เหล็กทั้งหมดที่ถูกใช้โดยไฟล์นั้นๆ&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;ให้สังเกตว่า inode นั้นไม่ได้เก็บทั้งชื่อไฟล์และ inode number ซึ่งชื่อไฟล์และ inode number นั้นถูกเก็บไว้ที่ directory เราสามารถใช้คำสั่ง &lt;b&gt;ls -i&lt;/b&gt; เพื่อแสดง inode number เช่น&lt;/div&gt;&lt;br /&gt;$ &lt;b&gt;ls -i A.TXT&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: red;"&gt;2630254&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A.TXT&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;ทำ Hard Links ด้วย ln&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;ทำไมชื่อไฟล์ถึงไม่ได้เก็บไว้ใน node ล่ะ นั่นก็เพื่อว่า ทำให้ไฟล์ๆ หนึ่งสามารถมีชื่อไฟล์ได้หลายชื่อ เมื่อไฟล์มีหลายชื่อเราจะกล่าวว่าไฟล์นั้นมีมากกว่าหนึ่ง &lt;b&gt;link &lt;/b&gt;เราสามารถเข้าถึงไฟล์นั้นได้ด้วยลิงค์ที่ไฟล์นั้นมี&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;คำสั่ง ln ได้เตรียมการทำชื่อแฝง (alias) และการนับลิงค์ขึ้นไปหนึ่ง ซึ่งค่าของการนับลิงค์นี้จะถูกเก็บไว้ใน inode คำสั่ง ln สามารถทำได้ทั้ง hard และ sym link รูปคำสั่งมีลักษณะคล้ายกับการใช้คำสั่ง cp ลองทำตามตัวอย่างด้านล่างนี้เพื่อความเข้าใจ (รึป่าว?)&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;b&gt;$ cd&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;$ mkdir link ; cd link&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ cat &amp;gt; A.TXT&lt;/b&gt;&lt;/div&gt;My name is Green &amp;lt;Enter&amp;gt;&lt;br /&gt;&amp;lt;ctrl-D&amp;gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ ls -li A.TXT&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red;"&gt;2630254&lt;/span&gt; -rw-r--r-- &lt;span style="color: red;"&gt;1&lt;/span&gt; green green 17 2010-11-27 22:44 A.TXT&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ ln A.TXT B.TXT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # make hard link&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ ls -li A.TXT B.TXT&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red;"&gt;2630254&lt;/span&gt; -rw-r--r-- &lt;span style="color: red;"&gt;2&lt;/span&gt; green green 17 2010-11-27 22:44 A.TXT&lt;/span&gt;&lt;br style="color: black; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red;"&gt;2630254 &lt;/span&gt;-rw-r--r-- &lt;span style="color: red;"&gt;2&lt;/span&gt; green green 17 2010-11-27 22:44 B.TXT&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ cat &amp;gt;&amp;gt; B.TXT&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;I want GNU &amp;lt;Enter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;Ctrl-D&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ cat A.TXT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;My name is Green&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;I want GNU&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;***หมายเหตุ: ที่เห็น &amp;lt;Enter&amp;gt; กับ &amp;lt;Ctrl-D&amp;gt; ไม่ใช่พิมพ์ตามไปนะ &amp;lt;Enter&amp;gt; หมายถึงกด Enter ส่วน &amp;lt;Ctrl-D&amp;gt; หมายถึง กดปุ่ม Ctrl ค้าง ตามด้วย D&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;หลักการทำงาน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;ณ ตอนแรก A.TXT มี inode number เป็น &lt;span style="color: black;"&gt;2630254&lt;/span&gt;&lt;b style="color: black;"&gt; &lt;/b&gt;หลังจากสิ้นสุดคำสั่ง ln เคอร์เนลล์ได้กระทำงานสองงานดังนี้&lt;br /&gt;&lt;ol&gt;&lt;li&gt;เพิ่มไฟล์ที่ชื่อว่า B.TXT ในไดเร็คทอรี่ปัจจุบัน แต่มี inode number เดียวกันกับ A.TXT&lt;/li&gt;&lt;li&gt;อัพเดตจำนวนลิงค์ใน inode จาก 1 เป็น 2&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: #a64d79;"&gt;สังเกตว่ามีไฟล์จริงๆ เพียงแค่ไฟล์เดียวเท่านั้น นั่นคือใช้พื้นที่ 17 bytes ไม่ใช่ 34 byte พิสูจน์ได้ (สำหรับเดสก์ท็อปนะ) โดยคลิกขวาที่พื้นที่ว่างๆ ในไดเร็คทอรี่ link แล้วเลือก properties&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;++ที่นี้เราลองมาทำอะไรดูกันซักนิด++&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;จากคำสั่งด้านบน ตอนนี้ในไดเร็คทอรี่ link มีไฟล์อยู่สองไฟล์ คือ A.TXT กับ B.TXT ให้เราลองย้ายไฟล์ A.TXT หรือ B.TXT ไฟล์ใดไฟล์หนึ่งออกจากไดเร็คทอรี่ link ไว้ซักที่ในระบบไฟล์ สมมติว่า เราย้ายไฟล์ B.TXT ไปไว้ที่ /tmp แล้วลอง แก้ไขไฟล์ B.TXT ดู แล้วกลับมาดูที่ไฟล์ A.TXT ว่าจะเกิดอะไรขึ้น&amp;nbsp; มาลองกันเลย!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;$ mv B.TXT /tmp&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;$ cd /tmp&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;$ cat &amp;gt;&amp;gt; B.TXT&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;I love GNU &amp;lt;Enter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;&amp;lt;Ctrl-D&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;$ cd ~/link&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="color: #a64d79;"&gt;&lt;span style="color: black;"&gt;$ cat A.TXT&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;My name is Green&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;I want GNU&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;I love GNU &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;จะเห็นว่าแม้จะย้ายไฟล์ไปแล้ว แต่ไฟล์ทั้งสองยังคงเชื่อมกันได้อยู่ (ต้องภายในระบบไฟล์ของตัวเองนะ มันทำข้ามระบบไฟล์ไม่ได้ เช่น สมมติมีพาร์ติชั่นสองพาร์ติชั่น ext4 กับ ext4 อีกตัวนึง เราไปทำข้ามระบบไฟล์มันจะไม่ได้ จริงๆ นะ ลองทำดู คนเขียนขี้เกียจทำตัวอย่างแล้วนิ)&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;แล้วทำ Hard Links ไปเพื่ออะไรหนอ&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;ลองพิจารณาว่า เราได้เขียนโปรแกรมสำหรับอ่านไฟล์ขึ้นมาหนึ่งโปรแกรม และให้อ่านไฟล์ที่มีชื่อว่า data.txt ซึ่งไฟล์ที่ว่านี้ถูกจัดเก็บไว้ใน /home/file/ ในเวลาต่อมาเราได้จัดระบบไดเร็คทอรี่ใหม่และย้าย data.txt ไปที่ /home/data แทน ปัญหาก็คือ จะจัดการกับโปรแกรมอ่านไฟล์ที่มองหาไฟล์ data.txt ใน /home/file/ ได้อย่างไร วิธีแก้ง่ายๆ ก็คือ link data.txt ไปที่ /home/file/ ซึ่งสามารถทำได้ดังนี้ &lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;~$ ln data/data.txt&amp;nbsp; file&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;หากมีการย้ายไฟล์เพียงแค่ไฟล์เดียว คงไปแก้พาธในโปรแกรมอ่านไฟล์ได้ไม่ยาก แต่ถ้าลองสักสิบไฟล์จะเริ่มดงนิดหน่อย 555+ แล้วปัญหาจริงๆ ก็คือมันจะย้ายไฟล์ไปทำไมวะนั่น อยู่ที่เดิมก็ดีอยู่แระ&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt; การทำลิงค์คนละไดเร็คทอรี่จะช่วยป้องกันการลบไฟล์โดยอุบัติเหตุ เช่น สมมติว่าไฟล์ ถึงแม้ว่าเราจะมี data.txt แค่เพียงไฟล์เดียวแต่การทำลิงค์เสมือนกับเป็นการทำสำเนาไฟล์อีกไฟล์ไว้ จากข้อข้างบน ถึงเราลบไฟล์ ~/file/data.txt เราก็ยังคงมีไฟล์สำรองอยู่ใน ~/data/data.txt&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;ทำ Symbolic Links ด้วย ln&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;สำหรับคนที่เคยใช้ M$ Window$ ต้องเคยใช้ Symbolic Links แน่นอน เพียงแต่อาจจะรู้จักในรูปแบบอื่น ถ้าพูดถึง shortcut icon ที่หน้า Desktop นี่แหละ ก็คือ Symbolic Links ซึ่งเจ้า shortcut icon มันจะเก็บตำแหน่งพาธโปรแกรมที่มันจะไปเรียกใช้งาน&amp;nbsp; สำหรับคนที่เคยมีประสบการณ์การลบไฟล์แบบไม่ใช่ uninstall โดยเข้าไปลบโปรแกรมดื้อๆ เลย อย่างเช่น เข้าไปใน my computer --&amp;gt; C:\ --&amp;gt; Program Files จัดการลบโฟล์เดอร์ utorrent (สมมติว่ามันติดตั้งไว้ที่ตรงนี้) พอลบเสร็จกลับมาที่หน้า Desktop ลองดับเบิ้ลคลิกไอคอน utorrent ที่นี้มันจะฟ้องว่า โปรแกรมไม่ได้มีอยู่ เพราะเราเพิ่งลบโฟล์เดอร์ที่มันอ้างถึง&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;มาลองทำ Symbolic Links กัน&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;ลองทำตามตัวอย่างนี้ดูก่อนนะครับ &lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cd &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ mkdir symlinks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cd symlinks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cat &amp;gt; file1.txt&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;This is file1 &amp;lt;Enter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;Ctrl-D&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cat &amp;gt; file2.txt&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;This is file2 &amp;lt;Enter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;Ctrl-D&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cat &amp;gt; file3.txt&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;This is file3 &amp;lt;Enter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;Ctrl-D&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cd ~/Desktop&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ ln -s ~/symlinks goToSymlinks&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;ตอนนี้เราได้ทำการสร้าง Symbolic Links เป็นที่เรียบร้อยแล้ว จากนั้นลองมาดูกันว่าเกิดอะไรขึ้น&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ ls -li&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;2629170 lrwxrwxrwx 1 green green&amp;nbsp;&amp;nbsp; 21 2010-12-04 18:16 goToSymlinks -&amp;gt; /home/green/symlinks/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;สังเกตว่า goToSymlinks ชี้ไปยัง /home/green/symlinks จากนั้นลอง&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ cd goToSymlinks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;$ ls -l&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;total 12&lt;br /&gt;-rw-r--r-- 1 green green 18 2010-12-04 18:20 file1.txt&lt;br /&gt;-rw-r--r-- 1 green green 18 2010-12-04 18:20 file2.txt&lt;br /&gt;-rw-r--r-- 1 green green 18 2010-12-04 18:20 file3.txt&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;จะพบว่าเรามีไฟล์ที่เราได้สร้างไว้ใน ~/symlinks ซึ่ง goToSymlinks เป็นเสมือนกับ shortcut ใน M$ Window$ ที่ได้กล่าวมาแล้ว ณ ข้างต้น&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;พอมาถึงตรงนี้หลายๆ คนอาจจะสงสัยว่า แล้ว Hard Links กับ Symbolic Links มันต่างกันยังไงหว่า? งั้นลองมาดูนี่กันเลยครับ&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;ความแตกต่างระหว่าง Hard Links กับ Symbolic Links&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;Hard Links ไม่สามารถทำกับ directory ได้ นั่นคือ Hard Links ทำได้กับเฉพาะไฟล์ ส่วน Symbolic Links สามารถทำได้ทั้งกับไฟล์และไดเร็คทอรี่&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Hard Links ไม่สามารถทำข้ามกับระบบไฟล์ได้&amp;nbsp; แต่ในขณะที่ Symbolic Links ทำได้&lt;/li&gt;&lt;li style="text-align: justify;"&gt;ไฟล์ที่ถูกทำ Hard Links เมื่อย้ายไฟล์ไปที่ต่างๆ ภายในระบบ จะยังคงสามารถเชื่อมถึงกันได้ แต่ Symbolic Links เมื่อย้ายไฟล์หรือไดเร็คทอรี่ที่ Symbolic Links นั้น&lt;b&gt;ทำการชี้อยู่ &lt;/b&gt;Symbolic Links นั้นจะไม่สามารถใช้การได้ เราจะเรียกกว่า &lt;b&gt;broken link&lt;/b&gt; (ทดสอบได้จากด้านบนที่เราได้ลองทำ Symbolic Links โดยให้เราลองย้ายไดเร็คทอรี่ Symlinks ไปที่อื่น เช่น ย้ายไปไว้ที่ Desktop คำสั่งต่างๆ ลองทำดูนะจะได้คุ้นเคย ที่จริงคนเขียนขี้เกียจทำหรอก เหอๆ)&lt;/li&gt;&lt;/ol&gt;เห้อ!!! จบซักที รู้สึกเบื่อมั้ยผู้อ่าน คนเขียนยังเขียนเองเบื่อเองเรยนิ 555+ ส่วนเพื่อนๆ มีอะไรสงสัยไม่เข้าใจก็นอกรอบได้นะ (แต่คิดว่าคงไม่มีให้นอกรอบ 55+)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-31540503078058878?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/31540503078058878/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/hard-links-symbolic-links.html#comment-form' title='2 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/31540503078058878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/31540503078058878'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/hard-links-symbolic-links.html' title='ทำ Hard Links และ Symbolic Links'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-8780283534380739689</id><published>2010-11-27T20:14:00.016+07:00</published><updated>2011-02-05T15:00:43.235+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><title type='text'>Shell Programming I</title><content type='html'>&lt;div style="color: black;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;เชลล์ (shell) คืออะไรหว่า?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://bp0.blogger.com/_MEHMwyByUSI/SIryTS-P0-I/AAAAAAAAAPA/96x0g8P0DXQ/s320/Linux5.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://bp0.blogger.com/_MEHMwyByUSI/SIryTS-P0-I/AAAAAAAAAPA/96x0g8P0DXQ/s200/Linux5.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;shell คือ โปรแกรมที่กระทำตัวเป็นอินเตอร์เฟซ (ส่วนติดต่อ) ระหว่างตัวเราและระบบลินุกซ์ ซึ่ง shell ยอมให้เราป้อนคำสั่งให้แก่ระบบปฏิบัติการดำเนินการกับคำสั่งนั้นๆ shell มีหลายยี่ห้อ เช่น sh (bourne shell), ksh (korn shell), csh&amp;nbsp; (c shell), &lt;br /&gt;bash (bourne again shell) และอีกมากมาย เราสามารถตรวจสอบได้ว่าใช้ shell ยี่ห้อไหนอยู่ โดยใช้คำสั่ง &lt;b&gt;echo $SHELL&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;จากในภาพเราจะเห็นว่า shell ทำตัวเสมือนกับสิ่งที่ห่อหุ้มเคอร์เนลล์เอาไว้  ก็เหมือนกับเปลือกหอยห่อหุ้มตัวหอยเอาไว้นะแหละ ถึงได้เรียกว่า shell มั้ง  555+&amp;nbsp; &lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;มาดูประวัติย่อ(สุดๆ) ของ shell กัน&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;b&gt;sh (bourne shell)&lt;/b&gt;&lt;br /&gt;เป็น shell ต้นแบบของ shell ทั้งหมด ถูกสร้างโดย Steve Bourne&lt;br /&gt;&lt;br /&gt;&lt;b&gt;csh, tcsh , zsh&lt;/b&gt;&lt;br /&gt;C shell ถูกสร้างโดย Bill Joy อาจจะเป็น shell ที่นิยมเป็นอันดับสามเลยทีเดียวเชียวรองจาก bash และ korn อีกสองตัวที่เหลือคือ tcsh , zsh นั่นสืบทอดมาพัฒนาต่อ แน่นอนต้องมีอะไรพิเศษกว่า csh&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ksh, pdksh&lt;/b&gt;&lt;br /&gt;เริ่มแรกไม่ฟรี เพราะถูกจับไปใส่ใน unix ที่ต้องเสียเงิน (commercial unix) แต่ตอนนี้ฟรีแล้ว ถูกสร้างโดย David Korn&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bash&lt;/b&gt;&lt;br /&gt;ตัวนี้ดูท่าทีว่าจะเป็นที่นิยมมากที่สุด ดูได้จากลินุกซ์ดิสทริบิวต์เกือบทั้งหมด มักจะนำมาเป็น shell มาตรฐาน ถูกสร้างโดย GNU มีโครงสร้างคล้ายคลึงกับ korn shell &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;การทำ Pipe และ Redirection อย่างง่าย&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ &lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;ls -l &amp;gt; lsoutput.txt&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เป็นการบันทึกผลลัพธ์จากการใช้ คำสั่ง ls -l ลงในไฟล์ lsoutput.txt หากไม่มีไฟล์ lsoutput.txt จะทำการสร้างไฟล์ใหม่ขึ้นมา หากมีอยู่แล้วจะทำการบันทึกทับของเก่าที่มีอยู่ &lt;span style="color: red;"&gt;(ระวังให้ดีก่อนใช้ เดี๋ยวจะงานเข้า เหอๆ)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;$ ps aux &amp;gt;&amp;gt; lsoutput.txt&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;บันทึกผลลัพธ์จากคำสั่ง ps ลงไปท้ายของไฟล์ต่อจากของเดิมที่มีอยู่&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ more &amp;lt; lsoutput.txt&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ cat lsoutput.txt | more &lt;/b&gt;&lt;/div&gt;ดูข้อมูลในไฟล์ lsoutput.txt &lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;$ ps aux | more &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;ดูข้อมูลจากคำสั่ง ps แต่ว่า เนื่องจากอาร์กิวเมนต์ aux แสดงข้อความออกมาเกินหนึ่งหน้าจอ เราจึงทำการไปป์ด้วย more เพื่อความสะดวกในการอ่าน&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;$ wc &amp;lt; lsoutput.txt &amp;gt; count.txt &lt;/b&gt;&lt;/div&gt;เก็บผลลัพธ์จากการนับบรรทัด นับคำ และตัวอักขระลงในไฟล์ count.txt&lt;br /&gt;&lt;br /&gt;&lt;b&gt;standard output ใช้ &amp;gt; , &amp;gt;&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;standard input ใช้ &amp;lt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-8780283534380739689?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/8780283534380739689/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/shell-programming-1.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/8780283534380739689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/8780283534380739689'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/shell-programming-1.html' title='Shell Programming I'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_MEHMwyByUSI/SIryTS-P0-I/AAAAAAAAAPA/96x0g8P0DXQ/s72-c/Linux5.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-5652603343289270206</id><published>2010-11-27T14:32:00.011+07:00</published><updated>2011-02-05T14:58:19.722+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><title type='text'>System call</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;รู้จักกับ System call&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;System call เป็นชุดคำสั่งที่สามารถใช้ภาษา C เข้าถึงได้ (ภาษาอื่นก็ทำได้ เช่น C++, Java ฯลฯ) System call มักจะถูกนำมาใช้ในการทำงานจำพวก file I/O จองหน่วยความจำ สร้างโปรเซส และอีกมากมาย System calls ถูกสร้างฝังมาอยู่ใน kernel โดยส่วนมากแล้วตัว System call เองนั้นจะเขียนด้วยภาษาแอสเซมบลี แต่มีการเตรียมอินเทอร์เฟซฟังก์ชันไว้ให้สำหรับใช้งาน ดังนั้นหากเราใช้ Unix, GNU/linux เราสามารถใช้ System call โดยสามารถเรียเป็นฟังก์ชันในภาษา C ได้&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;User mode Vs Kernel mode&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Kernel mode&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;เคอร์เนลเป็นโปรแกรมหรือส่วนประกอบหลักของระบบปฏิบัติการ เป็นส่วนที่ทำงานทั้งหมด หากไม่มีเคอร์เนล์แล้วเราก็ไม่มีระบบปฏิบัติการ จริงๆ แล้ว Linux ไม่มีอะไรไปมากกว่าเคอร์เนล โปรแกรมต่างที่ทำขึ้นมานอกเหนือจากระบบปฏิบัติการแล้วคือ ซอฟท์แวร์ของ GNU ดังนั้น เราจะเรียกรวมกันว่า GNU/Linux &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;User mode &lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;User mode เป็นโหมดปกติของการจัดการกับโปรแกรมต่างๆ เช่น เว็บบราวเซอร์ เครื่องคิดเลข ฯลฯ จะอยู่ในโหมดนี้ โปรแกรมพวกนี้ไม่ได้มีผลกระทบกับเคอร์เนล์โดยตรง โปรแกรมเหล่านี้จะให้ชุดคำสั่งแก่เคอร์เนล์และบอกว่าต้องการจะทำอะไร เคอร์เนล์จะเป็นตัวรับคำสั่งและจัดการกับคำสั่งที่รับมา โปรแกรมที่เชื่อมต่อกับเคอร์เนล์โดยตรงได้แก่ device driver ซึ่ง device driver ต้องบอกแก่เคอร์เนล์อย่างแน่ชัดว่า ต้องการจะทำอะไรกับส่วนต่างๆ ของฮาร์ดแวร์ ดังนั้นจึงจำเป็นต้องทำงานอยู่ภายใน kernel mode เนื่องจากว่าการติดต่อนี้มีความใกล้ชิดกับเคอร์เนล และตัวเคอร์เนลเองก็อาจมีจุดอ่อนกับโปรแกรมที่รันในโหมดนี้ ดังนั้นจึงสำคัญมากว่า ไดร์เวอร์ต่างๆ ได้ถูกตรวจทานมาอย่างดีแล้วก่อนที่จะถูกนำมาใช้&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://four-f.webs.com/KmdTut/img%5Ckmd1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://four-f.webs.com/KmdTut/img%5Ckmd1-1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&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/7367391901970940875-5652603343289270206?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/5652603343289270206/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/system-call-programming-i.html#comment-form' title='2 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/5652603343289270206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/5652603343289270206'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/system-call-programming-i.html' title='System call'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-7090449592455919670</id><published>2010-11-27T06:37:00.015+07:00</published><updated>2011-02-05T15:03:03.301+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beginning Linux Programming book'/><category scheme='http://www.blogger.com/atom/ns#' term='E-Books'/><title type='text'>หนังสือ Beginning Linux Programming</title><content type='html'>เมื่อวันพฤหัสบดีที่ผ่านมา เห็นอาจารย์ธวัชชัยเอาหนังสือมาให้ดู เห้ยมันเล่มเดียวกันนิหว่า 555+ ก็เลยเอามาฝากเพื่อนๆ ในหนังสือเล่มนี้จะเป็นการเขียนโปรแกรมบนลินุกซ์ ไม่ใช่ M$ และจะใช้ภาษา C ในการเขียนโปรแกรม&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://nicearchive.com/wp-content/uploads/2010/03/linux-programing.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://nicearchive.com/wp-content/uploads/2010/03/linux-programing.jpg" width="292" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; color: orange; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://www.mediafire.com/?si1coq9xzlrhfyt"&gt;Download here&amp;nbsp;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; color: orange; font-family: inherit; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; color: orange; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: red; font-family: inherit;"&gt;*** ปล. ลิงค์เน่าแจ้งได้นะครับ&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-7090449592455919670?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/7090449592455919670/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/beginning-linux-programming.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/7090449592455919670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/7090449592455919670'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/beginning-linux-programming.html' title='หนังสือ Beginning Linux Programming'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-8280580944143542191</id><published>2010-11-26T17:35:00.131+07:00</published><updated>2011-02-05T15:09:59.900+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='scp'/><title type='text'>การใช้ scp ถ่ายโอนไฟล์</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;scp คืออะไร? มีไว้ทำอะไรหว่า?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/11/scp.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="https://dl.dropbox.com/u/20251842/MyBlog/Articles/2553/11/scp.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;scp เป็นคำสั่งหนึ่งบนระบบปฏิบัติการ linux ซึ่งมีชื่อเต็มๆ ก็คือ "secure copy" เป็นคำสั่งที่มีไว้สำหรับคัดลอกไฟล์จาก Remote System มายัง Local System หรือจาก Local System ไปยัง Remote System (Remote System &amp;lt;---&amp;gt; Local System) ในการใช้ scp เราไม่จำเป็นต้อง Login เข้าไปใน Remote System แต่เราจะต้องใส่รหัสผ่านทุกครั้งในการถ่ายโอนไฟ&lt;b&gt;ล์ &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="color: #cc0000;"&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: black;"&gt;&lt;span style="font-size: small;"&gt;วิธีการคัดลอกไฟล์จาก Local System ไปยัง Remote System&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;รูปแบบ:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: large;"&gt;scp&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: large;"&gt; &amp;lt;file...&amp;gt; user@host.domain:path&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;file&lt;/b&gt; คือ ไฟล์ที่จะทำการคัดลอก&lt;/li&gt;&lt;li&gt; &lt;b&gt;user&lt;/b&gt; คือ ชื่อ user ใน remote system&lt;/li&gt;&lt;li&gt;&lt;b&gt;host.domain&lt;/b&gt; คือ ที่อยู่ของ remote system เช่น angsila.cs.buu.ac.th&lt;/li&gt;&lt;li&gt;&lt;b&gt;path &lt;/b&gt;คือ ชื่อเต็มของพาธที่ต้องการนำไฟล์ที่จะคัดลอกจาก local system มาไว้ใน remote system &lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;u&gt;&lt;b&gt;ตัวอย่างการใช้งาน&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div style="color: white;"&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;สมมติว่า มีไฟล์อยู่ไฟล์ชื่อว่า file1.c อยู่ในไดเร็กทอรี่ /home/green/ ต้องการจะคัดลอกไฟล์นี้ไปที่ host ที่ชื่อว่า angsila.cs.buu.ac.th และต้องการให้ไฟล์นี้ไปอยู่ในไดเร็คทอรี่ public_html จะใช้คำสั่ง scp ได้ดังนี้&lt;/div&gt;&lt;br /&gt;&lt;div style="color: purple;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;scp&lt;/b&gt; /home/green/file1.c 52030937@angsila.cs.buu.ac.th:~/public_html/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;กรณีต้องการคัดลอกไฟล์ทั้งไดเร็คทอรี่สามารถใช้ออบชั่น -r ได้ เช่น สมมติว่าต้องการคัดลอกไดเร็คทอรี่ชื่อว่า fileDir ซึ่งไดเร็คทอรี่ fileDir นี้อยู่ใน /home/green/ และต้องการคัดลอก fileDir นี้ไปอยู่ใน public_html จะใช้คำสั่งได้ดังนี้&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: purple;"&gt;&lt;b&gt;scp &lt;/b&gt;-r /home/green/fileDir 52030937@angsila.cs.buu.ac.th:/~public_html/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #e06666;"&gt;***หมายเหตุ ~/public_html/ เป็นรูปแบบของ relative pathname ซึ่ง ~ หมายถึง ไดเร็คทอรี่ home ของเราเอง เราสามารถใช้อีกรูปแบบหนึ่งได้ดังนี้ /home/cs52d/52030937/public_html/&amp;nbsp; และเรียกรูปแบบนี้ว่า absolute pathname&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;b&gt;วิธีการคัดลอกไฟล์จาก Remote system ไปยัง Local system&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;รูปแบบ: &lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: large;"&gt;scp&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: large;"&gt; user@host.domain ... dest &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;dest&lt;/b&gt; คือ ปลายทางที่ต้องการคัดลอกไฟล์จาก remote system มายัง local system&lt;/li&gt;&lt;/ul&gt;&lt;pre style="font-family: inherit;"&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&lt;u&gt;&lt;b&gt;ตัวอย่างการใช้งาน&lt;/b&gt;&lt;/u&gt;&amp;nbsp;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;สมมติว่า ต้องการคัดลอกไฟล์ file1.c ใน public_html ของ angsila.cs.buu.ac.th มาจัดเก็บไว้ที่&amp;nbsp; /home/green/Desktop/sourcecode/ ใน local System จะใช้คำสั่ง scp ได้ดังนี้&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;div style="color: purple;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;scp&lt;/b&gt; '52030937@angsila.cs.buu.ac.th:~/public_html/file1.c' /home/green/Desktop/sourcecode/&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;ความสามารถของ scp ยังมีอีกมากมาย แต่ตอนนี้สนใจเพียงแค่นี้ แหะๆ ใครอยากทราบรายละเอียดเพิ่มเติม ก็ลอง man scp ดูนะครับ หรือจะพี่เกิ้ล&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-8280580944143542191?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/8280580944143542191/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/scp-linux.html#comment-form' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/8280580944143542191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/8280580944143542191'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/scp-linux.html' title='การใช้ scp ถ่ายโอนไฟล์'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7367391901970940875.post-3301621410079479192</id><published>2010-11-04T09:05:00.076+07:00</published><updated>2010-12-04T19:16:31.494+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='vi command'/><title type='text'>คำสั่ง Vi พื้นฐาน (Basic Vi command)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://security.raffy.ch/divers/Books/images/vi.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://security.raffy.ch/divers/Books/images/vi.jpg" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;vi คืออะไร ?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;vi (&lt;b&gt;vi&lt;/b&gt;sual editor) เป็นโปรแกรมประเภท (text editor) ซึ่งจะติดมากับระบบปฏิบัติการจำพวก UNIX , GNU/Linux&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;คำสั่งเริ่มต้นใช้งาน vi&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th align="LEFT" style="color: black; font-weight: normal;"&gt;&lt;b&gt;คำสั่ง&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/th&gt;&lt;th align="LEFT" style="color: black; font-weight: normal;"&gt;&lt;b&gt;คำอธิบาย&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;vi&amp;nbsp;&lt;b&gt;&lt;i&gt;file&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;td&gt;เริ่มต้นที่บรรทัดที่หนึ่งแฟ้ม &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;vi&amp;nbsp;+n&amp;nbsp;&lt;b&gt;&lt;i&gt;file&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;td&gt;เริ่มต้นที่บรรทัดที่ n ของแฟ้ม &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;vi&amp;nbsp;+&amp;nbsp;&lt;b&gt;&lt;i&gt;file&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;td&gt;เริ่มต้นที่บรรทัดสุดท้ายของแฟ้ม &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;vi&amp;nbsp;-r&amp;nbsp;&lt;b&gt;&lt;i&gt;file&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;td&gt;กู้แฟ้มคืนหลังจากที่ระบบขัดข้อง&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;การสลับรูปแบบการทำงาน (switching command mode &amp;lt;--&amp;gt; insert mode)&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; โดยเมื่อเริ่มต้นเข้ามาที่หน้าโปรแกรมนั้นโปรแกรมจะอยู่ที่ command mode ซึ่งหากต้องการพิมพ์ตัวอักขระ เราจะต้องทำการเปลี่ยนโหมดมาเป็น insert mode ทำได้โดยการกดตัว (i, a, o ที่อยู่ในหัวข้อ &lt;u&gt;&lt;b&gt;การพิมพ์ข้อความ&lt;/b&gt;&lt;/u&gt;) ที่แป้นพิมพ์ เมื่อต้องการออกกลับไปยัง command mode ให้กด Esc ที่แป้นพิมพ์&lt;/div&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;*** หมายเหตุ หากพบเครื่องหมาย : หน้าคำสั่ง แสดงว่าเป็น command mode นั่นก็คือ หากอยู่ใน insert mode ต้องเปลี่ยนไปเป็น command mode ก่อน ด้วยการกด Esc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;การบันทึกไฟล์และการออกจากโปรแกรม&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th align="LEFT"&gt;คำสั่ง&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/th&gt;&lt;th align="LEFT"&gt;คำอธิบาย&lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:w &lt;/td&gt;&lt;td&gt;บันทึกแฟ้มที่กำลังถูกแก้ไข &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:w &lt;b&gt;&lt;i&gt;file&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;td&gt;บันทึกแฟ้มพร้อมกับตั้งชื่อแฟ้ม&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:q &lt;/td&gt;&lt;td&gt;ออกจาก vi&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:wq &lt;/td&gt;&lt;td&gt;บันทึกไฟล์และออกจาก vi&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:x &lt;/td&gt;&lt;td&gt;บันทึกแฟ้มหากแฟ้มมีการเปลี่ยนแปลงและออกจาก vi &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:q! &lt;/td&gt;&lt;td&gt;ออกจาก vi โดยไม่ทำการบันทึกแฟ้ม&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;การย้ายเคอร์เซอร์&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;หากอยู่ใน insert mode ให้กด Esc มาที่ command mode จากนั้นกดตามคีย์ด้านล่างได้เรย&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th align="LEFT"&gt;คีย์&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/th&gt;&lt;th align="LEFT"&gt;ผลลัพธ์&lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;h &lt;/td&gt;&lt;td&gt;เลื่อนไปทางซ้ายหนึ่งอักขระ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;l or &amp;lt;Space&amp;gt; &lt;/td&gt;&lt;td&gt;เลื่อนไปทางขวาหนึ่งอักขระ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;k &lt;/td&gt;&lt;td&gt;เลื่อนขึ้นหนึ่งบรรทัด&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;j or &amp;lt;Enter&amp;gt; &lt;/td&gt;&lt;td&gt;เลื่อนลงหนึ่งบรรทัด&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;b &lt;/td&gt;&lt;td&gt;เลื่อนไปทางซ้ายหนึ่งคำ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;w &lt;/td&gt;&lt;td&gt;เลื่อนไปทางขวาหนึ่งคำ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;( &lt;/td&gt;&lt;td&gt;เริ่มต้นที่ประโยค&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;) &lt;/td&gt;&lt;td&gt;สิ้นสุดที่ประโยค&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;{ &lt;/td&gt;&lt;td&gt;เริ่มต้นที่พารากราฟ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;} &lt;/td&gt;&lt;td&gt;สิ้นสุดที่พารากราฟ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;1G &lt;/td&gt;&lt;td&gt;เลื่อนไปที่ตำแหน่งสูงสุดของแฟ้ม &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;b&gt;&lt;i&gt;n&lt;/i&gt;&lt;/b&gt;G &lt;/td&gt;&lt;td&gt;เลื่อนไปที่บรรทัดที่ n&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;G &lt;/td&gt;&lt;td&gt;สิ้นสุดแฟ้ม&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&amp;lt;Ctrl&amp;gt;W &lt;/td&gt;&lt;td&gt;ไปที่ตัวอักขระแรกที่พิมพ์&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&amp;lt;Ctrl&amp;gt;U &lt;/td&gt;&lt;td&gt;เลื่อนขึ้นไปครึ่งหน้าจอ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&amp;lt;Ctrl&amp;gt;D &lt;/td&gt;&lt;td&gt;เลื่อนลงมาครึ่งหน้าจอ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&amp;lt;Ctrl&amp;gt;B &lt;/td&gt;&lt;td&gt;ขึ้นไปหนึ่งหน้าจอ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&amp;lt;Ctrl&amp;gt;F &lt;/td&gt;&lt;td&gt;ลงมาหนึ่งหน้าจอ &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;การพิมพ์ข้อความ&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th align="LEFT"&gt;คีย์ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/th&gt;&lt;th align="LEFT"&gt;ข้อความที่จะแทรก&lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;a &lt;/td&gt;&lt;td&gt;หลังเคอร์เซอร์&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;A &lt;/td&gt;&lt;td&gt;หลังจากตัวอักขระตัวสุดท้ายของบรรทัด&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;i &lt;/td&gt;&lt;td&gt;ก่อนเคอร์เซอร์&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;I &lt;/td&gt;&lt;td&gt;ก่อนตัวอักขระตัวแรกของบรรทัด &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;o &lt;/td&gt;&lt;td&gt;ขึ้นบรรทัดล่างจากบรรทัดปัจจุบัน&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;O &lt;/td&gt;&lt;td&gt;ขึ้นบรรทัดบนจากบรรทัดปัจจุบัน &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;การลบข้อความ&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;th align="LEFT"&gt;ปุ่ม&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/th&gt;&lt;th align="LEFT"&gt;ข้อความที่จะลบ &lt;/th&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;x &lt;/td&gt;&lt;td&gt;ตัวอักขระทางด้านขวาของเคอร์เซอร์&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;i&gt;&lt;b&gt;n&lt;/b&gt;&lt;/i&gt;x &lt;/td&gt;&lt;td&gt;ตัวอัขระทางด้านขวาของเคอร์เซอร์ n ตัว&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;X &lt;/td&gt;&lt;td&gt;ตัวอักขระทางด้านซ้ายของเคอร์เซอร์&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;dw &lt;/td&gt;&lt;td&gt;หนึ่งคำ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;i&gt;&lt;b&gt;n&lt;/b&gt;&lt;/i&gt;dw &lt;/td&gt;&lt;td&gt;n คำ&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;d0 &lt;/td&gt;&lt;td&gt;to beginning of line &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;d$ &lt;/td&gt;&lt;td&gt;to end of line &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;dd &lt;/td&gt;&lt;td&gt;บรรทัดปัจจุบัน&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;i&gt;&lt;b&gt;n&lt;/b&gt;&lt;/i&gt;dd &lt;/td&gt;&lt;td&gt;n บรรทัด &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;:1,$ d &lt;/td&gt;&lt;td&gt;ทั้งแฟ้ม&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7367391901970940875-3301621410079479192?l=greenesses.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenesses.blogspot.com/feeds/3301621410079479192/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://greenesses.blogspot.com/2010/11/vi.html#comment-form' title='1 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/3301621410079479192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7367391901970940875/posts/default/3301621410079479192'/><link rel='alternate' type='text/html' href='http://greenesses.blogspot.com/2010/11/vi.html' title='คำสั่ง Vi พื้นฐาน (Basic Vi command)'/><author><name>Green</name><uri>http://www.blogger.com/profile/03069360327001256286</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5b5j1AkOqqs/TeY2UJu4lQI/AAAAAAAAAFE/phVwAOGQUmc/s220/2011-05-02-1608301.jpg'/></author><thr:total>1</thr:total></entry></feed>
