[Powered by Google Translate] [பகுதி 5 - மேலும் வசதியான] [ராப் Bowden - ஹார்வர்ட் பல்கலைக்கழகம்] [இந்த CS50 உள்ளது. - CS50.TV] நான் என் மின்னஞ்சல் கூறினார் போல், நீங்கள் பயன்படுத்தலாம் நிறைய விஷயங்கள் உள்ளன உண்மையில் பிரச்சினை செட் செய்ய சாதனம் வேறு. நாம் இன்னும் எளிதாக உங்களுக்கு உதவ முடியும் உன்னால் பயன்பாட்டிற்கான அதை செய்ய பரிந்துரை நாங்கள் எல்லாம் வேலை என்ன தெரியுமா. ஆனால் என்ன, நீங்கள் எல்லாம் செய்ய முடியும் ஒரு உதாரணமாக, நீங்கள் அணுக இல்லை ஒரு கருவியை அல்லது நீங்கள் அறிவியல் மையம் அடித்தள வேலை செய்ய வேண்டும் - இது உண்மையில் அவர்கள் மிகவும் பயன்பாட்டிற்கான வேண்டும் - நீங்கள் எங்கு வேலை விரும்பினால். ஒரு எடுத்துக்காட்டாக நீங்கள் பார்த்து / SSH கேட்டுவிட்டேன்? SSH தான் ஏதாவது இணைக்க போன்ற அடிப்படையில். உண்மையில், இப்போது நான் பயன்பாட்டிற்கான ஒரு SSHed. நான் பயன்பாட்டிற்கான நேரடியாக வேலை இல்லை. இங்கே பயன்பாடு, மற்றும் நீங்கள் இங்கு இருக்கும் நீங்கள் இந்த ஐபி முகவரியை பார்க்கவும். நான் பயன்பாட்டிற்கான தன்னை வேலை இல்லை; நான் எப்போதும் ஒரு iTerm2 சாளரத்தில் / முனைய சாளரத்தில் வருவாள். நீங்கள் ஐபி முகவரி, ssh jharvard@192.168.129.128 செய்ய SSH முடியும். இது போன்ற ஒரு நல்ல முறை தான் நான் மிகவும் எளிதாக அந்த எண்ணை நினைவில். ஆனால் அந்த என்னுடைய கடவுச்சொல்லை என்னை கேட்பார்கள், இப்போது நான் பயன்பாட்டிற்கான இருக்கிறேன். அடிப்படையில், இந்த கட்டத்தில், நீங்கள், பயன்பாடு தன்னை உள்ளே ஒரு முனை திறந்து இந்த இடைமுகம், ஆனால் நீங்கள் அதை பயன்படுத்த முடியும், அதே தான் முகப்பு நான் இங்கு பயன்படுத்தி ஆனால் இப்போது நீங்கள் SSHed நீங்கள். நீங்கள் பயன்பாட்டிற்கான ஒரு SSH இல்லை. நீங்கள் எப்படி SSH மற்றொரு இடத்தில் ஒரு எடுத்துக்காட்டாக நீங்கள் முன்னிருப்பாக இருக்கும் அழகான நிச்சயமாக இல்லை - ஓ. பெரிய. நீங்கள் அனைத்து எஃப்.ஏ. எஸ் சேவையகங்களில் முன்னிருப்பு எஃப்.ஏ. எஸ் கணக்குகள் மூலம் வேண்டும். எனக்கு, நான் SSH rbowden@nice.fas.harvard.edu வேண்டும் என்று. அதை நீங்கள் தான் முதல் முறையாக 'to ask நடக்கிறது, நீங்கள் சம்மதிக்கிறேன். என்னுடைய கடவுச்சொல்லை என் எஃப்.ஏ. எஸ் கடவுச்சொல்லை போகிறது. அதனால் இப்போது, நான் நல்ல சேவையகங்களுக்கு SSHed, மற்றும் நான் இங்கே எதை வேண்டுமானாலும் செய்ய முடியும். நீங்கள் 124 போன்ற ஆகலாம் வகுப்புகள் நிறைய, நீங்கள் இங்கு பொருட்களை ஏற்ற வேண்டும் போகிறீர்கள் உண்மையில் உங்கள் பிரச்சினை செட் சமர்ப்பிக்க. ஆனால் நீங்கள் உங்கள் பயன்பாட்டிற்கான அணுகல் இல்லை என்று. பிறகு, விஷயங்களை செய்ய இங்கே இப்படி சொல்ல முடியும் - இந்த கேள்விகள் நம் பிரிவு. இது பயன்பாட்டிற்கான இந்த செய்ய நீங்கள் கேட்க வேண்டும். அதற்கு பதிலாக நான் சர்வரில் அதை செய்கிறேன். நான் அந்த zip கோப்பை திறக்க போகிறேன். பிரச்சனை நீ gedit போல பயன்படுத்தி பயன்படுத்தப்படும் என்று போகிறது இரணத்தை அல்லது அதை உள்ளே. நீங்கள் எஃப்.ஏ. எஸ் சர்வரில் அந்த வேண்டும் போவதில்லை. அது அனைத்து இந்த உரை இடைமுகத்தை இருக்க போகிறது. அதனால், அவர்கள் இல்லை என்று ஒரு உரை ஆசிரியர் அறிய அல்லது ஒரு முயற்சி என்று. அவர்கள் நானோ வேண்டும். நானோ பொதுவாக பயன்படுத்த அழகான எளிது. உங்கள் அம்புகள் பயன்படுத்தி பொதுவாக தட்டச்சு செய்யலாம். அதனால் கடுமையாக இல்லை. நீங்கள் உண்மையில் ஆடம்பரமான பெற விரும்பினால் நீங்கள், Emacs பயன்படுத்தலாம் நான் கூட Emacs மூட எப்படி என்று தெரியவில்லை, ஏனெனில் இது நான் அநேகமாக திறந்து கூடாது. கட்டுப்பாடு எக்ஸ், கட்டுப்பாடு சி? Yeah. அல்லது உங்களுக்கு நான் பயன்படுத்த என்ன இது Vim, பயன்படுத்த முடியும். அதனால் அந்த உங்கள் விருப்பங்கள். நீங்கள் அதை செய்ய விரும்பவில்லை என்றால், நீங்கள் கூட, நீ பார் என்றால் manual.cs50.net - ஓ. ஒரு கணினியில், நீங்கள் SSH, புட்டி பயன்படுத்தி நீங்கள் தனியாக பதிவிறக்கி வேண்டும் போகிறோம் இது. ஒரு Mac இல், நீங்கள் இயல்புநிலை பயன்பாடு முனை அல்லது நீங்கள், iTerm2 பதிவிறக்க முடியும் இது ஒரு நல்ல, ஆடம்பரமான டெர்மினல் போல. நீங்கள் manual.cs50.net சென்று நீங்கள் Notepad இணைப்பை காண்பீர்கள் + + இது ஒரு கணினியில் பயன்படுத்த முடியும் என்று. இது Notepad இருந்து நீங்கள் SFTP உதவுகிறது + + எந்த அடிப்படையில் SSH உள்ளது. என்ன இந்த உங்களுக்கு உதவும், உள்நாட்டில் உங்கள் கோப்புகளை திருத்த உள்ளது பிறகு அவர்களை காப்பாற்ற வேண்டும் போதெல்லாம், அதை, nice.fas செய்ய சேமிக்கும் நீங்கள் அவற்றை இயக்க முடியும். ஒரு மேக் மீது சமமான TextWrangler போகிறது. அதை நீங்கள் தான் செய்ய முடியும். இது, நீங்கள் உங்கள் கணினியில் கோப்புகளை திருத்த மற்றும் nice.fas அவற்றை சேமிக்க உதவுகிறது நீங்கள் அவற்றை இயக்க முடியும். நீங்கள் எப்போதாவது ஒரு கருவியை இல்லாமல் மாட்டிக்கொண்டிருக்கிறோம் என்றால், நீங்கள் இந்த விருப்பங்கள் உங்கள் பிரச்சினை செட் செய்ய இன்னும் வேண்டும். ஒரு பிரச்சனை நீங்கள் CS50 நூலகம் வேண்டும் போவதில்லை என்று போகிறது nice.fas முன்னிருப்பாக என்று இல்லை, ஏனெனில். நீங்கள் CS50 நூலகம் பதிவிறக்க முடியும் - நான் இந்த நேரத்தில் என்று நினைக்கவில்லை. நீங்கள், CS50 நூலகம் பதிவிறக்கி nice.fas அது தொடர்பாக நகலெடுக்க முடியும் அல்லது நான் இந்த இடத்தில் நாம் எப்படியும் இனி அதை பயன்படுத்த வேண்டாம் என்று. நாம் செய்தால் அல்லது, நீங்கள் முறையாக அதற்கு பதிலாக எப்படியும் CS50 நூலகத்தில் செயல்பாடுகளை செயலாக்கங்கள். அதனால் ஒரு கட்டுப்பாடு அவ்வளவு கூடாது. அந்த என்று. நான் இப்போது பயன்பாட்டிற்கான செல்ல, நாம் உபயோகப்பொருள் எல்லாம் செய்வேன். நான் என் மின்னஞ்சல் கூறினார் போல், ஆரம்பத்தில், கேள்விகள் நம் பிரிவை பார்த்து, நாங்கள் உன்னை பார்க்க வேண்டும் என்று குறுகிய பற்றி பேச வேண்டும். நாங்கள் திருப்பி & பைப்புகள் மற்றும் இந்த மூன்று கேள்விகள். எந்த ஓடை போன்ற செயல்பாடுகளை printf முன்னிருப்பாக எழுத? ஸ்ட்ரீம் எனவே. ஒரு ஓடை என்ன? அது சில போல் ஒரு ஸ்ட்ரீம் அடிப்படையில் - அது கூட 1 வி மற்றும் 0s ஆதாரமாக இல்லை. அதை இங்கே கேட்டு தான் ஸ்ட்ரீம் தரம் இல்லை. எனவே தரமான வெளியே ஒரு ஸ்ட்ரீம் நீங்கள், அதை எழுத போது அதை திரையில் தோன்றும். நிலையான அவுட், ஸ்ட்ரீம் மூலம், நீங்கள் மட்டும், 1 வி மற்றும் அதை 0s எழுத பொருள் மற்றும் நிலையான அவுட் மற்ற இறுதியில் தான் அந்த ஸ்ட்ரீம் இருந்து படிக்கிறார். இது 1 வி மற்றும் 0s ஒரு சரம் தான். நீங்கள் நீரோடைகள் எழுத முடியும் அல்லது நீங்கள் நீரோடைகள் இருந்து படிக்க முடியும் ஸ்ட்ரீம் உண்மையில் என்ன பொறுத்து. மற்ற இரண்டு இயல்புநிலை நீரோடைகள் மற்றும் நிலையான பிழை தரமானதாக இருக்கும். நீங்கள் GetString செய்ய போதெல்லாம் நிர்ணயமாக இருக்கிறது, அதை நீங்கள் உள்ளீடு பொருள் காத்திருக்கின்றனர். அதனால் உனக்காக காத்திருக்கிறேன், அது உண்மையில், நிலையான மீது காத்துக்கொண்டிருக்கிறார் இதில் நீங்கள் விசைப்பலகை உள்ள தட்டச்சு போது நீங்கள் என்ன உண்மையில். நீங்கள் தரமான முறையில் தட்டச்சு நிலையான பிழை, நிலையான வெளியே செல்ல அடிப்படையில் சமமாக நீங்கள் நிலையான பிழை அச்சிட போது ஆனால், அந்த சிறப்பு தான் நீங்கள் தான் பிழை செய்திகளை அச்சிட வேண்டும் எனவே நீங்கள் திரையில் அச்சிடப்பட்டு வழக்கமான செய்திகளை பாகுப்படுத்தி அவர்கள் தரமான அவுட் அல்லது நிலையான பிழை சென்றார் என்பதை பொறுத்து பிழை செய்திகளை எதிராக. மிகவும் கோப்புகள். நிலையான அவுட், நிலையான மற்றும் நிலையான பிழை, ஒரு சிறப்பு போக்குகள் ஆனால் உண்மையில் எந்த கோப்பு, நீங்கள் ஒரு கோப்பை திறக்கும் போது, அது பைட்டுகள் ஒரு ஓடை ஆகிறது எங்கே அந்த ஸ்ட்ரீம் இருந்து படிக்க முடியும். நீங்கள், பெரும்பாலான, வெறும் பைட்டுகள் ஒரு ஓடை போல் ஒரு கோப்பு நினைக்க முடிகிறது. அதனால் என்ன நீரோடைகள் அவர்கள் இயல்பாக எழுத வேண்டும்? நிலையான அவுட். > மற்றும் >> என்ன வித்தியாசம்? யாராவது முன்பே வீடியோ பார்க்க? சரி. >, நீங்கள் கோப்புகளில் திருப்பி எப்படி இருக்க போகிறது மேலும் >> மேலும், கோப்புகளில் வெளியீடு திருப்பி போகிறது ஆனால் அதற்கு பதிலாக கோப்பில் சேர்க்க வேண்டும் நடக்கிறது. உதாரணமாக, நாம் நான், சரி இங்கே dict வேண்டும் நடக்கும் என்று மற்றும் dict உள்ளே மட்டுமே பொருட்களை பூனை, பூனை, நாய், மீன், நாய். நீங்கள் கட்டளை வரியில் என்று ஒரு கட்டளை, பூனை, இது ஒரு கோப்பில் என்ன அச்சிட வேண்டும். அதனால் நான் பூனை dict என்று சொல்லும் போது, அது பூனை, பூனை, நாய், மீன், நாய் அச்சிட நடக்கிறது. அனைத்து பூனை இல்லை தான். அது பூனை, பூனை, நாய், மீன், நாய் வெளியே நிலையான அச்சிடப்பட்டு என்று பொருள். நான் அதற்கு பதிலாக ஒரு கோப்பு என்று திருப்பி விரும்பினால், நான் பயன்படுத்த> மற்றும் கோப்பு என்ன அதை திருப்பி முடியும். நான் கோப்பு கோப்பு அழைக்கிறேன். நான் ls என்றால் இப்போது, நான் கோப்பை என்று அழைக்கப்படும் ஒரு புதிய கோப்பு வேண்டும் என்று பார்க்கிறேன். நான் அதை திறந்து என்றால், அது பூனை கட்டளை வரியில் வைத்து சரியாக என்ன வேண்டும் நடக்கிறது. நான் மீண்டும் அந்த செய்தால் அதனால் இப்போது, அது, கோப்பில் வெளியீடு திருப்பிவிட நடக்கிறது நான் அதே சரியான விஷயம் தான் போகிறேன். எனவே தொழில்நுட்ப, அது முற்றிலும் நாம் என்ன overrode. நான் dict மாற்ற நாம் பார்க்கலாம், நான் நாய் வெளியே எடுத்தார். இப்போது மீண்டும் கோப்பில் நாம் பூனை dict என்றால், நாம் நாய் நீக்கப்பட்டு புதிய பதிப்பு போகிறது. அது முற்றிலும் இது மீறப்படும். நாம் >> பயன்படுத்தினால், அதற்கு பதிலாக, அதை கோப்பு சேர்க்க வேண்டும் நடக்கிறது. இப்போது, கோப்பு திறந்து, நாம் இருமுறை அச்சிடப்படும் மட்டும் தான் இருக்கிறது இது ஒரு முறை இருந்தது ஏனெனில், நாம் உண்மையான இணைக்கப்படும். எனவே என்ன> மற்றும் >> செய்ய. அடுத்த ஒரு ask - அது பற்றி கேட்க கூடாது. நாம் வேறு ஒரு நிலையான அவுட் வழிமாற்றுகளை <இருந்தால்,>, தான் <நிலையான உள்ளே திருப்பி போகிறது நாம் ஒரு உதாரணம் இருந்தால் பார்க்கலாம். நான் ஒரு உண்மையான விரைவு எழுத முடியும். அது எந்த கோப்பு, hello.c அழைத்து செல்லலாம். நேரடியாக கோப்பு. நான் நான் உள்ளிட்ட சரம் தான் என்ன "வணக்கம்" அச்சிடும் பின்னர் ஒரு சரம் பெறுவது மற்றும். அதனால் ஹலோ ஹலோ பின்னர் செய்ய. /. இப்போது அது, ஏதாவது நுழைய எனக்கு தூண்டுதல் அது உள்ளே நிலையான நுழைந்தது வேண்டும் விஷயங்களை காத்து பொருள் எனவே நாங்கள் ராப், வணக்கம் சொல்ல போகிறோம் உள்ளே நான் தரமான கொண்டு என்ன வேண்டுமானாலும் நுழைய! அது, வணக்கம் அவுட் தரத்தை ராப் அச்சிடும்! நான். / ஹலோ பின்னர் திருப்பி, செய்தால் இப்போது நீங்கள் மட்டுமே ஒரு கோப்பு இருந்து திருப்பி முடியும். நான் சில கோப்பு, txt வைக்க, நான், ராப் வைத்து இருந்தால் நான் ஹலோ ரன் பின்னர் இந்த கோப்பு txt திருப்பிவிட வேண்டும். / ஹலோ, இது ராப், வணக்கம் சொல்ல நடக்கிறது! உடனடியாக. அது முதல் GetString கிடைத்தால் அது, நிலையான மீது காத்து போது நிலையான உள்ளிட்ட கொள்ள தரவு விசைப்பலகை காத்திருக்கின்றன இல்லை. அதற்கு பதிலாக, நாம் கோப்பு txt இருந்து வாசிக்க நிலையான திருப்பிவிடப்பட்டது. எனவே இது வெறும் வரி ராப் இது கோப்பு txt, இருந்து வாசிக்க நடக்கிறது பின்னர் அதை வணக்கம், ராப் அச்சிட நடக்கிறது! நான் விரும்பினால், நான் என்ன செய்ய முடியும். / ஹலோ நீங்கள் 2 செய்ய>, நிலையான பிழை திருப்பி. ஏதாவது நிலையான பிழை சென்று இருந்தால், அதை txt2 வந்தது. ஆனால் நான் 2> செய்தால் கவனிக்க, அது இன்னும் ராப், வணக்கம் அச்சிடும்! கட்டளை வரியில் நான் மட்டுமே நிலையான பிழை திருப்பி இருக்கிறது, ஏனென்றால், நான் தரமான அவுட் திருப்பி இல்லை. நிலையான பிழை மற்றும் நிலையான வெளியே உள்ளன. நீங்கள் உண்மையில் நிலையான பிழை எழுத வேண்டும், என்று நான் stderr செய்ய fprintf இந்த மாற்ற முடியும். எனவே printf, முன்னிருப்பாக, நிலையான அவுட் செய்ய அச்சிடுகிறது. நான் கைமுறையாக நிலையான பிழை அச்சிட வேண்டும் என்றால், நான் fprintf பயன்படுத்த வேண்டும் மற்றும் நான் அச்சிட வேண்டும் என்று குறிப்பிடவும். அதற்கு பதிலாக நான் fprintf stdout செய்தால், பின் அந்த printf செய்ய அடிப்படையில் சமமாக இருக்கும். ஆனால் fprintf நிலையான பிழை. அதனால் இப்போது, நான் txt2 இந்த திருப்பிவிட என்றால், வணக்கம், ராப்! இன்னும் கட்டளை வரியில் அச்சிட அது நிலையான பிழை அச்சிடப்பட்டு மற்றும் நான் மட்டுமே நிலையான அவுட் திருப்பி நான் இருந்து. நான் இப்போது தரமான பிழை திருப்பி என்றால், இப்போது அதை அச்சிட்டு, மற்றும் txt2, வணக்கம் ராப் போகிறது! அதனால் இப்போது, நீங்கள் நிலையான பிழை உங்கள் உண்மையான பிழைகள் அச்சிட முடியாது மற்றும் நிலையான அவுட் உங்கள் வழக்கமான செய்திகளை அச்சிட. உங்கள் நிரலை எனவே போது, நீங்கள் 2 ஹலோ இந்த வகை அதை ரன். / முடியாது> உங்கள் திட்டம், பொதுவாக இயக்க போகிறார் என்று ஆனால் நீங்கள் எனக்கு எந்த பிழை செய்திகளை, உங்கள் பிழை பதிவு பின்னர் பார்க்கலாம் பிழைகள் மிகவும், பின்னர் பார்த்து உங்கள் பிழைகள் கோப்பு நடந்தது என்று எந்த பிழைகளை வேண்டும். கேள்விகள்? கடந்த ஒரு ஒரு கட்டளை இருந்து நிலையான வெளியே எடுத்து என நினைக்க முடியும் குழாய், இல்லை அது அடுத்த கட்டளை நிலையான செய்யும். ஒரு எடுத்துக்காட்டாக இங்கே எதிரொலி ஒரு கட்டளை வரி விஷயம் என்று தான் நான் அதன் வாதம் என்று வைத்து என்ன எதிரொலி போகிறது. நான் மேற்கோள் மாட்டான். எதிரொலி அபத்தம், அபத்தம், அபத்தம் வெறும் அபத்தம், அபத்தம், அபத்தம் அச்சிட வேண்டும். முன், நான் சொல்லும் போது நான் ஒரு txt கோப்பில் ராப் வைத்து இருந்தது நான் மட்டும் txt கோப்புகளை திருப்பி, அதற்கு பதிலாக ஏனெனில், / நான் ராப் எதிரொலி என்றால் பின்னர் குழாய் அது. / ஹலோ, அந்த விஷயத்தை அதே வகை செய்யும். இந்த கட்டளையை வெளியீடு, எதிரொலி ராப், எடுக்கிறது மற்றும் உள்ளீடு அதை பயன்படுத்தி. / ஹலோ. நீங்கள் முதலில் ஒரு கோப்பில் எதிரொலி ராப் திருப்பி அதை நினைக்க முடிகிறது பின்னர். / ஹலோ என்று கோப்பில் உள்ளீடு தான் outputted என்று. ஆனால் அது படம் தற்காலிகமாக கோப்பினை எடுக்கும். என்று கேள்விகள்? அடுத்த கேள்வி, இந்த ஈடுபடுத்த போகிறது. என்ன குழாய் நீங்கள் names.txt என்ற கோப்பில் தனிப்பட்ட பெயர்கள் எண்ணிக்கை கண்டறிய பயன்படுத்த முடியும்? நாம் இங்கே பயன்படுத்த வேண்டும் போகிறோம் கட்டளைகளை தனிப்பட்ட, அதனால் uniq, பின்னர் WC இருக்கும். நீங்கள், உண்மையில் அந்த என்ன இருக்கும் மனிதன் uniq செய்ய முடியும் அது வெறும் உள்ளீடு இருந்து அருகில் பொருந்தும் வரிகளை வடிகட்ட நடக்கிறது. மற்றும் மனிதன் WC NEWLINE, வார்த்தை, மற்றும் ஒவ்வொரு கோப்பிலும் பைட் எண்ணிக்கை அச்சிட வேண்டும். நாம் பயன்படுத்த வேண்டும் போகிறோம் கடந்த ஒரு மாதிரியான இது வெறும் txt கோப்பு இணைப்புகள் வரிசைப்படுத்த வேண்டும். நான் சில txt கோப்பு, names.txt, மேலும் இது ராப், டாமி, ஜோசப், டாமி, ஜோசப், RJ, ராப், இருந்தால் என்ன நான் இங்கே செய்ய வேண்டும் இந்த கோப்பில் தனிப்பட்ட பெயர்கள் எண்ணிக்கை கண்டறிய வேண்டும். அதனால் பதில் என்ன வேண்டும்? >> [மாணவர்] 4. >> சரி. இது ராப், டாமி, ஜோசப் முதல் 4 இருக்க வேண்டும், RJ இந்த கோப்பு மட்டுமே தனிப்பட்ட பெயர்கள். முதல் கட்டமாக, நான் names.txt வார்த்தை எண்ணிக்கை செய்தால், இந்த உண்மையில் எனக்கு எல்லாம் சொல்கிறார். இந்த உண்மையில் அச்சிடும் உள்ளது - newlines, வார்த்தைகள், மற்றும் பைட் எண்ணிக்கை - மனிதன் WC, பார்க்கலாம். நான் மட்டும் வரிகளை பற்றி கவலை என்றால், பிறகு நான் WC-l names.txt செய்ய முடியும். அதனால் படி 1 தான். Names.txt தான் அனைத்து பெயர்கள் உள்ளன ஏனெனில் ஆனால் நான், WC-l names.txt விரும்பவில்லை நான் எந்த அல்லாத தனிப்பட்ட ஒருவர் வெளியே வடிகட்ட வேண்டும். நான் uniq names.txt செய்தால் அதனால், அந்த மிக எனக்கு என்ன வேண்டுமோ அதை கொடுக்க முடியாது நகல் பெயர்கள் இன்னும் இருப்பதால். அது ஏன்? ஏன் uniq நான் என்ன செய்வது? [மாணவர்] நகல்களை இல்லை [செவிக்கு புலப்படாமல்] >> சரி. Uniq ஆண் பக்கம் நினைவில் வடிகட்டி அருகில் பொருத்தம் வரிகளை என்கிறார். அவர்கள் அருகில் இல்லை, அதனால் அவர்கள் வடிகட்ட முடியாது. நான் அவர்களுக்கு முதல் வரிசைப்படுத்த என்றால், வகையான names.txt ஒன்றாக அனைத்து போலி கோடுகள் போட்டு வருகிறது. எனவே இப்போது வகையான names.txt என்று. Uniq | நான் எந்த uniq, உள்ளீடு என்று பயன்படுத்த வேண்டும் போகிறேன். என்று என்னை ஜோசப், RJ, ராப், டாமி, கொடுக்கிறது மற்றும் நான், WC-l உள்ளீடு என்று பயன்படுத்த வேண்டும் இது எனக்கு 4 கொடுக்க போகிறார். அதை இங்கே சொல்வது போல, நீ என்ன குழாய் பயன்படுத்த முடியும்? நீங்கள் கட்டளைகளை ஒரு தொடர் பயன்படுத்தி போன்ற நிறைய விஷயங்களை செய்ய முடியும் நீங்கள் அடுத்த கட்டளையை உள்ளீடு ஒரு கட்டளை இருந்து வெளியீடு பயன்படுத்தும். நீங்கள் நிறைய விஷயங்களை, வீழ்வது நிறைய விஷயங்களை செய்ய முடியும். கேள்விகள்? சரி. குழாய்கள் மற்றும் திருப்பிவிட அது தான். இப்போது நாம் உண்மையான பொருள், குறியீட்டு பொருள் சென்று. இந்த PDF உள்ளே, நீ, இந்த கட்டளையை பார்க்கலாம் உங்கள் சாதனம் இந்த கட்டளையை இயக்க வேண்டும் என்று நான் நினைக்கிறேன். wget, அடிப்படையில், இப்போது இணையத்தில் இருந்து ஏதாவது பெற கட்டளை எனவே wget இந்த URL ஐ. நீங்கள் உங்கள் உலாவியில் இந்த URL க்கு போனால், அது அந்த கோப்பை பதிவிறக்க வேண்டும். நான் அதை கிளிக், அது எனக்கு கோப்பு பதிவிறக்கம். ஆனால் முனையம் உள்ளே அந்த விஷயம் wget எழுதி உங்கள் முனையத்தில் பதிவிறக்கி போகிறது. , நான் section5.zip வேண்டும், மற்றும் நீங்கள் section5.zip zip கோப்பை திறக்க வேண்டும் என்று நான் நினைக்கிறேன் இது, நீங்கள் section5 என்று ஒரு கோப்புறையை கொடுக்க போகிறது நாம் அது உள்ளே இன்று பயன்படுத்தி கொள்ள போகிறோம் கோப்புகள் அனைத்தையும் சாப்பிட போகிறேன் இது. இந்த திட்டங்கள் 'கோப்பு பெயர்களை பரிந்துரைக்க என, அவர்கள் ஒரு பிட் தரமற்ற தான், உங்கள் பணி gdb ஐ பயன்படுத்தி ஏன் கண்டுபிடிக்க வேண்டும். அவர்கள் அனைவருக்கும் பதிவிறக்கம் / அவர்களை பதிவிறக்கம் பெற எப்படி தெரியும் அவற்றின் பயன்பாடு பற்றி? சரி. ./buggy1 இயங்கும், இது, அடுக்கு தவறு (கோர் டம்ப்) கூறுவேன் இதில் நீங்கள் ஒரு segfault கிடைக்கும் எந்த நேரத்தில், அது ஒரு கெட்ட விஷயம். என்ன சூழ்நிலையில் நீங்கள் ஒரு segfault கிடைக்கும்? [மாணவர்] ஒரு பூஜ்ய சுட்டிக்காட்டி Dereferencing. >> சரி. அதனால் ஒரு உதாரணம் ஆகும். நீங்கள் ஒரு segfault போகிறோம் ஒரு பூஜ்ய சுட்டிக்காட்டி Dereferencing. நீங்கள் நினைவு தொட்டு என்ன ஒரு வழிமுறையாக segfault நீங்கள் தொட்டு கூடாது. எனவே ஒரு பூஜ்ய சுட்டிக்காட்டி dereferencing, முகவரி 0 தொடும் மற்றும் அடிப்படையில், அனைத்து கணினிகள் இப்போதெல்லாம் முகவரியை 0 நீ தொட்டு கூடாது நினைவகம் என்று. ஒரு segfault ஒரு வெற்று சுட்டிக்காட்டி முடிவு dereferencing அதனால் தான். நீங்கள் ஒரு சுட்டிக்காட்டி துவக்க முடியவில்லை நடக்கும் போது, அது, ஒரு குப்பை மதிப்பு உள்ளது அதனால் நீங்கள் dereference முயற்சி போது, அனைத்து வாய்ப்பினை நீங்கள் நினைவு தொடுதல் என்று எங்கும் மத்தியில் தான். நீங்கள் அதிர்ஷ்டசாலி மற்றும் குப்பை மதிப்பு பெற நேர்ந்தால் ஸ்டாக் அல்லது ஏதாவது எங்காவது சுட்டி நடந்தது, பிறகு நீங்கள் சுட்டிக்காட்டி துவக்கப்படும் இல்லை என்று நீங்கள் dereference, எதுவும் தவறாக போம். அதை சுட்டி காட்டும் போது ஆனால், எங்கோ ஸ்டேக் மற்றும் குவியல் இடையே, என்று அல்லது அது எங்கோ, இன்னும் உங்கள் நிரல் பயன்படுத்தப்படுகிறது இல்லை என்று சுட்டி காட்டும் நீ தொட்டு கூடாது நினைவக தொட்டு நீங்கள் segfault. நீங்கள் ஒரு சுழல்நிலை செயல்பாடு எழுதி அதை பல முறை recurses போது உங்கள் ஸ்டேக் விஷயங்களை மிக பெரிய மற்றும் ஸ்டாக் மோதுகிறது வளரும் நீ தொட்டு அது மோதி கூடாது என்று, நீங்கள் நினைவகத்தை தொட்டு நீங்கள், எனவே நீங்கள் segfault. என்ன ஒரு segfault உள்ளது. அதே காரணம் என்று உங்களை போன்ற ஒரு சரம் இருந்தால் - முந்தைய திட்டத்தை திரும்ப செல்லலாம். இந்த hello.c-I'm நான் வேறு ஏதாவது செய்ய. கரி * கள் = "ஹலோ உலகம்!"; நான் பயன்படுத்தினால் * கள் = ஒன்று அல்லது கள் [0] = 'எக்ஸ்'; அதனால் ஹலோ செய்ய,. / ஹலோ, ஏன் என்று segfault? ஏன் இந்த segfault? நீங்கள் என்ன எதிர்பார்க்கிறீர்கள்? நான் printf செய்தால் ("% s \ n", கள்); என்ன அச்சிடப்பட்டிருக்கும் எதிர்பார்க்க முடியும்? [மாணவர்] எக்ஸ் ஹலோ. >> சரி. பிரச்சனை, நீங்கள் இந்த மாதிரி ஒரு சரம் போது அறிவிக்க உள்ளது கள், ஸ்டாக் போக நடக்கிறது என்று ஒரு சுட்டி உள்ளது என்ன கள் குறிக்கும் என்பது வாசிப்பு மட்டும் நினைவகம் உள்ள இந்த சரம். வெறும் பெயர், வாசிப்பு மட்டும் நினைவகம் மூலம், நீங்கள் யோசனை வேண்டும் என்று நீங்கள் வாசிப்பு மட்டும் நினைவக என்ன மாற்ற முயற்சி செய்தால், நீங்கள் நினைவகம் செய்யவில்லை ஏதோ செய்கிறாய் நீ segfault. இந்த உண்மையில் எரிப்பதை * கள் மற்றும் கரி கள் [] இடையில் ஒரு பெரிய வித்தியாசம். எனவே எரிப்பதை கள் [], இப்போது இந்த சரம் ஸ்டாக் வைக்க போகிறது, மற்றும் ஸ்டாக் இந்த செய்தபின் நன்றாக வேலை வேண்டும், அதாவது, படிக்க மட்டுமே அல்ல. மற்றும் அது. நினைவில் என்று நான் எரிப்பதை செய்யும் போது * கள் = "ஹலோ உலகம்!", கள் தன்னை ஸ்டாக் உள்ளது ஆனால் கள் வேறு புள்ளிகளை, மற்றும் வேறு எங்காவது படிக்க மட்டுமே இருக்க நடக்கிறது. ஆனால் எரிப்பதை கள் [] தான் ஸ்டேக்கில் ஒன்று. அதனால் ஒரு segfault நடந்து மற்றொரு எடுத்துக்காட்டு. நாம் ./buggy1 ஒரு segfault விளைவாக என்று பார்த்தேன். கோட்பாடு, நீங்கள் உடனடியாக buggy1.c பார்க்க கூடாது. அதற்கு பதிலாக, நாம் gdb ஐ மூலம் அதை பார்க்க வேண்டும். நீங்கள் அடுக்கு தவறு (கோர் டம்ப்) கிடைக்கும் போது கவனிக்க, நீங்கள் இங்கே என்று கோர் இந்த ஃபைலை. நாம் ls-l என்றால், நாம் அந்த அடிப்படை பொதுவாக ஒரு அழகான பெரிய கோப்பு பார்க்கிறேன். இந்த கோப்பு பைட்டுகள் எண்ணிக்கை, அது 250-ஏதாவது கிலோபைட்டுகளை போல் தெரிகிறது. இந்த காரணம் கோர் டம்ப் உண்மையில் என்ன உள்ளது இருக்கும் போது, உங்கள் நிரல் செயலிழந்தால், உங்கள் திட்டம் நினைவக நிலை வெறும் நகல் மற்றும் இந்த கோப்பில் ஒட்டப்படும். அந்த கோப்பில் கொட்டப்படுகின்றன. இந்த திட்டம், அது இயங்கும் போது, 250 சுற்றி கிலோபைட்டுகளை ஒரு நினைவக பயன்பாடு வேண்டும் நடந்தது எனவே இந்த கோப்பில் டம்ப் நடந்தது என்ன. நாம் gdb ஐ buggy1 முக்கிய செய்தால் இப்போது நீங்கள் அந்த கோப்பு பார்க்க முடியும். நாங்கள் gdb ஐ buggy1 செய்ய முடியும், என்று மட்டும், தொடர்ந்து gdb ஐ தொடங்கும் என்று அதன் உள்ளீடு கோப்பு buggy1 பயன்படுத்தி. நீங்கள் gdb ஐ buggy1 முக்கிய செய்தால் ஆனால், அது குறிப்பாக gdb ஐ தொடங்கும் நடக்கிறது என்று கோர் கோப்பில் பார்த்து. நீங்கள் buggy1 வழிமுறையாக gdb ஐ கூறி அந்த கோர் கோப்பில் buggy1 திட்டம் வரும் என்று தெரிகிறது. எனவே gdb ஐ buggy1 முக்கிய உடனடியாக எங்களுக்கு கொண்டு போகிறது திட்டத்தை நிறுத்தி நடந்தது அங்கு என்று. நாம் திட்டம் சிக்னல் 11, பிரிவு தவற்றை முடிவு இங்கே பார்க்க. நாம் ஒருவேளை மிகவும் பயனுள்ளதாக இது சட்டமன்ற, ஒரு வரி பார்க்க நடந்தது. நீங்கள் BT அல்லது backtrace தட்டச்சு ஆனால், அந்த செயல்பாடு இருக்க போகிறது என்று எங்கள் தற்போதைய ஸ்டேக் பிரேம்கள் பட்டியலை கொடுக்கிறது. எனவே backtrace. நாம் இரண்டு அடுக்கு பிரேம்கள் வேண்டும் போல் இருக்கிறது. முதல், எங்கள் முக்கிய ஸ்டாக் சட்டகமானது உள்ளது இரண்டாவது, நாம் இருக்க நடக்கும் இந்த விழாவில் ஸ்டாக் சட்டகமானது உள்ளது நாம் மட்டும் சட்டசபை குறியீடு உள்ளது போன்ற எந்த தெரிகிறது. எனவே எங்கள் முக்கிய செயல்பாடு மீண்டும் செல்லலாம், நாம் சட்ட 1 செய்ய முடியும் என்று, நான் நாங்கள் கீழே செய்ய முடியும் என்று, அல்லது - ஆனால் நான் கிட்டத்தட்ட கீழே செய்ய முடியாது. Yeah. மேலும் கீழும். மேலே நீங்கள் ஒரு ஸ்டாக் சட்டகமானது நீங்கள் கீழே கொண்டு கீழே, ஒரு ஸ்டாக் சட்டகமானது காட்டும். நான் அந்த பயன்படுத்த முடியாது முனைகின்றன. நான் குறிப்பாக 1 பெயரிடப்பட்ட சட்ட சென்று இது சட்ட 1, என்று. சட்ட 1, முக்கிய ஸ்டாக் சட்டகமானது நோக்கி நம்மை அழைத்து செல்கிறது அது சரி, இங்கே நாம் இருக்க நடக்கும் குறியீடு வரி பணம். நாம் குறியீடு ஒரு ஜோடி மேலும் வரிகளை விரும்பினால், நாங்கள், பட்டியலில் சொல்ல முடியும் என்று நம்மை சுற்றி குறியீடு அனைத்து வரிகளையும் கொடுக்க நடக்கிறது. நாம் மணிக்கு segfaulted வரி 6: நீங்கள் (strcmp ("CS50 பாறைகள்", argv [1]) == 0). அது இன்னும் தெளிவாக இல்லை என்றால், நீங்கள் அதை segfaulted ஏன் நினைத்து இங்கே இருந்து நேராக அதை பெற முடியும். ஆனால் நாம் ஒரு படி மேலே எடுத்து சொல்ல, "ஏன் argv [1] segfault என்று?" முடியும் நாம் அச்சு argv [1], மற்றும் அது வெற்று சுட்டிக்காட்டி இது அது 0x0, தெரிகிறது. நாம் segfault போகிறது என்று CS50 பாறைகள் மற்றும் பூஜ்ய strcmping, மற்றும். ஏன் என்று argv [1] பூஜ்ய? [மாணவர்] நாம் எந்த கட்டளை வரி அளவுருக்களை வழங்காததால். Yeah. நாம் அது எந்த கட்டளை வரி அளவுருக்களை தரவில்லை. எனவே ./buggy1 மட்டுமே argv [0] ./buggy1 இருக்க வேண்டும் என்று. அது ஒரு argv [1] வேண்டும் போகவில்லை, segfault போகிறது என்று. அதற்கு பதிலாக, நான் CS50 செய்ய, ஆனால், அதை நீங்கள் ஒரு டி கிடைக்கும் என்று நடக்கிறது அது என்ன செய்யவேண்டும் என்ன காரணம். Buggy1.c பார்த்து, அதை அச்சிட வேண்டும் என "நீங்கள் ஒரு டி கிடைக்கும்" - Argv [1] "CS50 பாறைகள்", வேறு, "நீ ஒரு டி கிடைக்கும்" என்றால் "நீங்கள் ஒரு ஒரு கிடைக்கும்!" நாம் ஒரு ஒரு தேவை இருந்தால், நாம், உண்மை என ஒப்பிட்டு இந்த வேண்டும் இது 0 ஒப்பிட்டு என்பதாகும். எனவே argv [1] "CS50 பாறைகள்" இருக்க வேண்டும். நீங்கள் கட்டளை வரியில் அதை செய்ய விரும்பினால், நீங்கள் வெளி தப்பிக்க \ பயன்படுத்த வேண்டும். எனவே CS50 \ பாறைகள் மற்றும் ஒரு ஒரு கிடைக்கும்! நீங்கள் பின்சாய்வுக்கோடானது செய்யாவிட்டால், ஏன் இந்த வேலை இல்லை? [மாணவர்] இது இரண்டு வெவ்வேறு வாதங்கள் தான். >> சரி. Argv [1] CS50 போகிறது, மற்றும் argv [2] பாறைகள் இருக்கும். சரி. இப்போது ./buggy2 மீண்டும் segfault போகிறது. அதற்கு பதிலாக அதன் முக்கிய கோப்பு அதை திறந்து, நாம் தான், நேரடியாக buggy2 திறக்க வேண்டும் gdb ஐ buggy2 எனவே. நாம் நமது நிரலை இப்போது, அது, நிரல் சமிக்ஞை SIGSEGV பெற்றார் சொல்ல நடக்கிறது இது சமிக்ஞை segfault, இது நடக்கும் நடந்தது அங்கு இது. எங்கள் backtrace பார்த்து, நாம், நாம் செயல்பாடு oh_no இருந்தன என்று பார்க்க இதில், செயல்பாடு binky அழைப்பு எந்த செயல்பாடு dinky, அழைப்பு இதில் முக்கிய அழைத்தார். நாம் இந்த செயல்பாடுகளை அளவுருக்களை பார்க்க முடியும். dinky மற்றும் binky என்று வாதம் 1 இருந்தது. நாம் செயல்பாடு oh_no பட்டியலிட என்றால், நாம் oh_no மட்டும் எரிப்பதை ** கள் = NULL செய்து பார்க்க; * கள் = "Boom"; ஏன் என்று தோல்வியடையும்? [மாணவர்] நீங்கள் dereference பூஜ்ய சுட்டிக்காட்டி முடியாது? >> சரி. ஒரு எரிப்பதை ** இருக்க நேர்ந்தால் இது, பொருட்படுத்தாமல், கள் சுழியாக சொல்கிறாள் நீங்கள் அதை புரிந்து எப்படி பொறுத்து, அது ஒரு சரம் ஒரு சுட்டிக்காட்டி ஒரு சுட்டிக்காட்டி இருக்கும் என்று, அல்லது சரங்களின் ஒரு வரிசை. இது கள் சுழியாக அதனால் * கள், ஒரு பூஜ்ய சுட்டிக்காட்டி dereferencing எனவே இந்த செயலிழக்க வேண்டும். இந்த சாத்தியமான segfault முடியும் விரைவான வழிகளில் ஒன்றாகும். அது ஒரு வெற்று சுட்டிக்காட்டி அறிவித்தார் உடனடியாக segfaulting. அந்த oh_no செய்கிறான். நாம் ஒரு சட்டகம் வரை சென்றால், நாம் oh_no என்று அந்த செயல்பாடு பெற போகிறோம். நான் கீழே அதை செய்ய வேண்டும். நீங்கள் ஒரு கட்டளையை உள்ளிட்டு என்றால் நீங்கள், மீண்டும் Enter விசையை அது நீங்கள் ஓடி என்று முந்தைய கட்டளையை மீண்டும் நடக்கும். நாம் சட்ட 1 உள்ளன. இந்த சட்ட பட்டியலிட்டு, நாம் இங்கே நமது செயல்பாடு பார்க்க. நீங்கள் மீண்டும் பட்டியல் அடிக்க முடியும், அல்லது நீங்கள் பட்டியலில் 20 செய்வது மற்றும் அதை இன்னும் பட்டியலிட முடியும். விழாவில் dinky நான் 1 இருந்தால், பின், oh_no விழாவிற்கு போக சொல்வது வேறு ஸ்லிங்கி விழாவிற்கு போக. மற்றும் நாம் இங்கு பார்க்க நடக்க காரணம் 1 என்று அந்த dinky வாதம் 1 அழைக்கப்பட்டார். அல்லது நீங்கள் தான் நான் அச்சிட மற்றும் அதை நான் 1 தான். நாம் dinky தற்போது, நாம் மற்றொரு சட்ட வரை சென்றால், நாம் binky முடிவடைய வேண்டும் என்று. Up. இப்போது நாம் binky இருக்கிறோம். அரை என்னை துண்டித்து முன் இருந்து பட்டியல் - - இந்த செயல்பாடு பட்டியலிடும் நான் 0 என்றால் அது தொடங்கியது, நாம் அதை oh_no அழைக்க போகிறோம், வேறு dinky அழைப்பு. நாம் என் 1 என்று எனக்கு தெரியும், அதனால் dinky என்று. இப்போது நாம் முக்கிய மீண்டும் நீங்கள், மற்றும் முக்கிய சில எண்ணாக நான் = ரேண்ட் ()% 3 போகிறது; என்று மட்டும் நீங்கள் 0, 1, அல்லது 2 என்று ஒரு சீரற்ற எண் கொடுக்க போகிறார். அது பல binky அழைக்க நடக்கிறது, அதை 0 திரும்புவார். இந்த பார்த்து, நான், உடனடியாக அது இயங்கும் இல்லாமல் கைமுறையாக திட்டத்தின் மூலம் நடைபயிற்சி நீங்கள் முக்கிய ஒரு பிரேக் பாயிண்ட் அமைக்க வேண்டும், அதில் நாம் நிரலை என்று அர்த்தம் இது ஒரு பிரேக் பாயிண்ட் எம் வரை உங்கள் நிரல் வரை இயங்கும். இயங்குவதாக எனவே, அதை இயக்கும் மற்றும் அது முக்கிய செயல்பாடு வெற்றி இயங்கும் தடுக்க முடியும். இப்போது நாம் முக்கிய உள்ளே இருக்கும், மற்றும் படி அல்லது அடுத்த குறியீடு அடுத்த வரியில் நம்மை கொண்டு செல்கிறது. நீங்கள் நடவடிக்கை அல்லது அடுத்த செய்ய முடியும். அடுத்த தாக்கியதால், இப்போது நான் ரேண்ட் ()% 3, எனவே நான் மதிப்பு அச்சிட முடியாது, அமைக்கப்படுகிறது அதை நான் 1 தான். இப்போது நாம் அடுத்த அல்லது படி பயன்படுத்த என்பதை விஷயம் இல்லை. நான் முந்தைய ஒரு முக்கியத்தும் நினைக்கிறேன், ஆனால் அடுத்த பயன்படுத்த வேண்டும். நாம் படி பயன்படுத்தினால், நாம் செயல்பாடு அடியெடுத்து, இது உண்மையான விஷயம் பாருங்கள் பொருள் அந்த binky உள்ளே நடக்கிறது. நாம் அடுத்த பயன்படுத்தினால், அது செயல்பாடு மீது போக பொருள் மற்றும் எங்கள் பிரதான விழாவில் குறியீடு அடுத்த வரி போக. இங்கே இந்த வரிசையில், நான் அதை ரேண்ட் ()% 3 கூறினார் இருந்தது; நான் படி செய்தால், அதை ரேண்ட் செயல்படுத்த போக வேண்டும் அங்கு என்ன நடக்கிறது என்று பாருங்கள், நான் ரேண்ட் செயல்பாடு மூலம் விலக முடியும். ஆனால் நான் ரேண்ட் செயல்பாடு பற்றி கவலை இல்லை. நான் பிரதான உள்ள குறியீடு அடுத்த வரி போக வேண்டும், நான் அடுத்த பயன்படுத்த. ஆனால் இப்போது நான் binky செயல்பாடு பற்றி கவலையில்லை, அதனால் நான் அந்த அடியெடுத்து வேண்டும். இப்போது நான் binky இருக்கிறேன். குறியீடு முதல் வரி (நான் == 0), நான் ஒரு முடிவை எடுக்க வேண்டும் சொல்ல போகிறார், நாம் dinky மணிக்கு முடிவுக்கு பார்க்க. நாம் பட்டியல் விஷயங்களை, நாம் அதை சரி என்று பார்த்தால் நான் = 0 ஆகும். , நான் 0 சமமாக இல்லை, அது வேறு நிலை சென்றார் இது dinky (நான்) அழைக்க போகிறார். நீங்கள் குழப்பி. நீங்கள் நேரடியாக இந்த வரிகளை பார்த்தால், நீங்கள் நினைக்கலாம், (நான் == 0) என்றால் சரி, நான் ஒரு படி எடுத்து இப்போது நான் dinky (நான்) இருக்கிறேன் நீங்கள் என்று நான் = 0 அல்லது ஏதாவது அர்த்தம் வேண்டும் நினைக்கலாம். இல்லை, இது வெறும் அது வரி dinky (நான்) நேரடியாக ஒட்டி கொள்ளலாம் தெரியும் என்று அர்த்தம். நான் 0 முடியாது என்பதால், அடுத்த நடவடிக்கை வேறு மணிக்கு முடிவுக்கு போவதில்லை. வேறு அது நிறுத்த நடக்கிறது ஒரு வரி அல்ல. அது உண்மையில் இது (நான்) dinky இருக்கிறது, இயக்க முடியும் அடுத்த வரி போக நடக்கிறது. Dinky (நான்) நுழைவதற்கு, நாம் பார்க்க (நான் == 1) என்றால். நாங்கள் விலக போது, நாம் oh_no முடிவடைய போகிறது என்று, நான் = 1 தெரிகிறோம் நான் = 1 நீங்கள் அடியெடுத்து கூடிய செயல்பாடு oh_no, அழைப்பு காரணமாக செய்ய போகிறார்கள் இதில் எரிப்பதை ** கள் = பூஜ்ய உடனடியாக "பூம்" என்று. பின்னர் உண்மையில், buggy2 செயல்படுத்த பார்க்க 0, 1, அல்லது 2 - - அழைப்பு binky, இந்த, நான் ஒரு சீரற்ற எண் வருகிறது நான் 0 என்றால் அது oh_no அழைக்கும், வேறு அதை dinky அழைப்பு, இது இங்கு வரும். நான், அழைப்பு oh_no 1 இருந்தால், வேறு, இங்கு வந்து இது, ஸ்லிங்கி அழைப்பு நான் 2 இருந்தால், oh_no அழைப்பு. நான் கூட ஒரு வழி உள்ளது நினைக்கவில்லை - யார் இந்த segfault என்று ஒரு திட்டத்தை உருவாக்கும் ஒரு வழி பார்க்க வேண்டும்? நான் ஏதாவது இழக்கிறேன் வரை நான் 0 இருந்தால், நீங்கள் உடனடியாக segfault வேண்டும், ஏனெனில், வேறு நீங்கள், நான் உங்களுக்கு segfault 1 என்று ஒரு செயல்பாடு சென்று வேறு நான் இருந்தால் 2 நீங்கள் segfault ஒரு விழாவிற்கு போக. இல்லை, நீங்கள் என்ன செய்தாலும், அதனால், நீங்கள் segfault. நான், அதை பதிலாக எரிப்பதை ** கள் = NULL செய்து இருக்க வேண்டும் சரிசெய்ய ஒரு வழி சொல்லுங்க நீங்கள் அந்த சரம் இடைவெளி malloc முடியும். Sizeof என்ன - நாம் malloc (sizeof) செய்ய முடியும்? [மாணவர்] (கரி) * 5? >> இது சரியான தெரியவில்லை? நான் உண்மையில் அது இயங்கிய இந்த வேலை அனுமானித்து, ஆனால் அதை நான் தேடிக்கொண்டிருக்கிறேன் என்ன இல்லை. கள் வகை பாருங்கள். இது int * சேர்க்க, அதனால் எண்ணாக * x. நான் (sizeof (int)) malloc செய்ய வேண்டும். அல்லது நான் 5 ஒரு வரிசை விரும்பினால், நான் (sizeof (int) * 5) செய்ய வேண்டும்; நான் ஒரு முழு எண்ணாக ** இருந்தால்? என்ன நான் malloc என்று? சுட்டிக்காட்டியின் [மாணவர்] அளவு. >> சரி. (Sizeof (int *)); கீழே இங்கே தான். நான் (sizeof (எரிப்பதை *)) வேண்டும்; இந்த "பூம்" சுட்டி காட்டும் என்று சுட்டிக்காட்டி இடத்தை ஒதுக்க வேண்டும். நான் "பூம்" தன்னை இடத்தை ஒதுக்க தேவையில்லை இந்த நான் முன்பு சொன்னதை அடிப்படையில் சமமாக இருப்பதால் எரிப்பதை ஒரு * x = "Boom". "பூம்" ஏற்கனவே உள்ளது. இது நினைவகம் வாசிப்பு மட்டும் பகுதியில் இருப்பதாக நடக்கிறது. கள் ஒரு எரிப்பதை ** என்று ஆனால் அது ஏற்கனவே, குறியீடு இந்த வரி அதாவது, உள்ளது பின்னர் * கள் ஒரு எரிப்பதை * மேலும் நீங்கள் "பூம்" சுட்டி இந்த எரிப்பதை * அமைப்பது தான். நான் கள் மீது "பூம்" நகலெடுக்க விரும்பினால், நான் கள் இடைவெளி ஒதுக்க வேண்டும். நான் செய்வேன் * கள் = malloc (sizeof (கரி) * 5); ஏன் 5? ஏன் 4? "பூம்" 4 எழுத்துக்கள் என்று தெரிகிறது. >> [மாணவர்] பூஜ்ய பாத்திரம். Yeah. உங்கள் சரங்களை அனைத்து வெற்று தன்மையை வேண்டும் போகிறீர்கள். இப்போது நான் strcat போன்ற ஏதாவது செய்ய முடியும் - ஒரு சரம் நகலெடுப்பதற்கான செயல்பாடு என்ன? [மாணவர்] cpy? >> Strcpy. மனிதன் strcpy. எனவே strcpy அல்லது strncpy. நீங்கள் குறிப்பிட முடியும் என்பதால் strncpy ஒரு பிட் பாதுகாப்பான என்பது எத்தனை எழுத்துக்கள், எங்களுக்கு தெரியும் என்பதால், ஆனால் இங்கே அது இல்லை. எனவே strcpy மற்றும் வாதங்களை பாருங்கள். முதல் வாதம் நமது இலக்காகும். இரண்டாவது வாதம் எங்கள் ஆதாரமாக உள்ளது. நாம் நம் இலக்கை * ஒரு காப்பி போகிறோம் சுட்டிக்காட்டி "பூம்" கள். ஏன் முன் பதிலாக நாம் வெறும் என்ன ஒரு strcpy இந்த செய்ய வேண்டும் * வி = "Boom"? அங்கு நீங்கள் இதை செய்ய வேண்டும் ஒரு காரணம், ஆனால் அந்த காரணம் என்ன? [மாணவர்] நீங்கள் "பூம்" ஏதாவது மாற்ற விரும்பினால். >> சரி. இப்போது நான் கள் போன்ற ஏதாவது செய்ய முடியும் [0] = 'எக்ஸ்'; கள் புள்ளிகள் குவியல் மீது குவியல் மற்றும் அந்த இடத்தில் கள் சுட்டி காட்டியது என்று காரணம் "பூம்" சேமித்து இது குவியல், மேலும் இடத்தில் ஒரு சுட்டிக்காட்டி இருக்கிறது. எனவே "பூம்" இந்த நகல் குவியல் சேமிக்கப்படும். எங்கள் திட்டத்தில் "பூம்" இரண்டு நகல்கள் தொழில்நுட்ப உள்ளன. இந்த "பூம்" சரம் தொடர்ந்து வழங்கப்படும் என்று முதல் ஒரு, அங்கு மற்றும் "பூம்" இரண்டாவது நகல், strcpy "பூம்" நகல் உருவாக்கப்பட்டது. ஆனால் "பூம்" நகல் குவியல் சேமிக்கப்படும், மற்றும் குவியல் நீங்கள் மாற்ற இலவச இருக்கும். குவியல் படிக்க மட்டுமே அல்ல, அது அர்த்தம் கள் [0] நீங்கள் "பூம்" மதிப்பை மாற்ற நாம் என்ன. நீங்கள் அந்த பாத்திரங்களின் மாற்ற நாம் நடக்கிறது. கேள்விகள்? சரி. , Buggy3 என்று நாம் gdb ஐ buggy3 செல்லும். நாம் அதை இயக்க மற்றும் நாம் ஒரு segfault செய்து பார்க்க. நாம் backtrace என்றால், இரண்டு செயல்பாடுகளை உள்ளன. எங்கள் முக்கிய செயல்பாடு போல சென்றால், நாம் இந்த வரியில் segfaulted என்று பார்க்க. அதனால் தான் (இந்த வரி பார்த்து எண்ணாக வரி = 0; fgets இந்த பொருள் சமமாக இல்லை NULL இல்லை வரி +). நமது முந்தைய சட்ட _IO_fgets அழைக்கப்பட்டது. நீங்கள் உள்ளமைக்கப்பட்ட சி செயல்பாடுகளை நிறைய பார்க்கலாம் நீங்கள் segfault போது, உண்மையில் புரிந்து செயல்பாடு பெயர்கள் இருக்கும் என்று இந்த _IO_fgets போல். ஆனால் இந்த fgets அழைப்பு தொடர்புபடுத்த நடக்கிறது. இங்கு உள்ளே, நாம் segfaulting. நாம் fgets அளவுருக்களை பார்த்தால், நாம் இடையக அச்சிட முடியாது. அச்சு நாம் ஒரு - இல்லை, ஓ. அச்சு சரியாக நான் அதை விரும்பவில்லை வேலை போவதில்லை. உண்மையான திட்டம் பார்க்கிறேன். இடையக ஒரு பாத்திரம் வரிசை ஆகும். இது 128 எழுத்துக்களை ஒரு பாத்திரம் வரிசை தான். நான் அச்சு இடையக என்று சொல்லும் போது, அது, அந்த 128 எழுத்துக்கள் அச்சிட நடக்கிறது இதில் நான் நினைக்கிறேன் எதிர்பார்க்கப்படுகிறது உள்ளது. என்ன நான் தேடி கொண்டிருந்தேன், இடையக முகவரி அச்சிட உள்ளது ஆனால் உண்மையில் எனக்கு சொல்ல தெரியவில்லை. அதனால் நான் இங்கே x தாங்கல் வரை என்ன நடக்கும் போது, அது, என்னை 0xbffff090 காட்டுகிறது நீங்கள் முந்தைய அல்லது சில புள்ளி இருந்து நினைவில் என்றால், Oxbffff ஒரு ஸ்டேக்-ish பகுதியில் இருக்கிறது இது. ஸ்டாக் தான் 0xc000 கீழ் எங்காவது தொடங்க இருக்கிறது. இந்த முகவரியை பார்த்து, நான் இடையக ஸ்டேக்கில் நடக்கிறது என்று. தாங்குவதற்கு, வரை, ரன், என் திட்டத்தை மீண்டும் தொடங்குவதற்கு நாம் தான் எழுத்துக்கள் இந்த காட்சியை பார்த்தேன் அந்த அழகான மிகவும் பொருளற்றது ஆகும். பின்னர் கோப்பு அச்சிடுதல், என்ன கோப்பு இருப்பான்? [மாணவர்] சுழியாக. >> சரி. , கோப்பு வகை FILE * ஒரு, எனவே அது ஒரு சுட்டிக்காட்டி உள்ளது என்று சுட்டிக்காட்டி மதிப்பு பூஜ்ஜிய உள்ளது. எனவே fgets, ஒரு மறைமுக வழி என்று சுட்டிக்காட்டி படிக்க முயற்சி போகிறது ஆனால் அந்த சுட்டியை அணுக, அதை dereference இது உள்ளது. அல்லது, அது dereferences இது, குறிக்கின்ற வேண்டும் என்ன அணுக. அது ஒரு வெற்று சுட்டிக்காட்டி அது segfaults dereferencing. நான் அங்கு அது மீண்டும். எங்கள் முக்கிய கட்டத்தில் உடைத்து ரன் என்றால், குறியீடு முதல் வரி எரிப்பதை * கோப்பு = "nonexistent.txt" என்று; இந்த திட்டம் தோல்வி ஏன் ஒரு அழகான பெரிய குறிப்பை கொடுக்க வேண்டும். நான் இந்த கோப்பை திறக்க அங்கு அடுத்த தட்டச்சு, அடுத்த வரி என்னை கொண்டு பின்னர் நான் உடனடியாக ஒருமுறை நான் அடுத்த அடித்தார் நம் வரி, வர, அதை segfault போகிறது. யாரையும் நாங்கள் segfaulting வேண்டும் ஏன் ஒரு காரணம் துரத்த வேண்டும்? [மாணவர்] கோப்பு இல்லை. >> சரி. இந்த குறிப்பை இருக்க வேண்டும் நீங்கள் ஒரு கோப்பை திறந்து நீங்கள் எப்போது நீங்கள் கோப்பு உண்மையில் உள்ளது என்று பார்க்க வேண்டும் என்று. இங்கு, "nonexistent.txt"; நாம் வாசிப்புக்கு fopen கோப்பு, நாம் சொல்ல வேண்டும் போது நீங்கள் (கோப்பு == NULL) மற்றும் printf ("கோப்பு இல்லை!" என்று அல்லது - இன்னும் சிறப்பாக - கோப்பு); திரும்பி 1; எனவே இப்போது நாம் அதை NULL என்று பார்க்கவும் முன் உண்மையில் தொடர்ந்து அந்த கோப்பு படிக்க முயற்சி. நாங்கள் தான் வேலை என்று பார்க்க அதை ரீ. நான் ஒரு புதிய வரியை சேர்க்கவும் நோக்கம். எனவே இப்போது nonexistent.txt இல்லை. நீங்கள் எப்போதும் தான் இந்த வகையான சோதிக்க வேண்டும். நீங்கள் எப்போதும் fopen NULL கொடுக்கிறது என்பதை சரிபார்க்க வேண்டும். நீங்கள் எப்போதும், malloc NULL தராது என்று உறுதிப்படுத்தி கொள்ளுங்கள் வேண்டும் அல்லது வேறு நீங்கள் segfault. இப்போது buggy4.c. இயங்கும். நான் உள்ளீடு அல்லது சாத்தியமான எல்லையற்ற வளைவு காத்திருக்கும் இந்த யோசிக்காமல். ஆமாம், அது முடிவில்லா வளைவு உள்ளது. Buggy4 எனவே. நாம் எல்லையற்ற வளைவு போல தெரிகிறது. நாங்கள் முக்கிய மணிக்கு உடைக்க முடியாது, நம்முடைய நிரலை. GDB இல், நீண்ட நீங்கள் பயன்படுத்த சுருக்கம் தெளிவான உள்ளது அல்லது அவர்கள் நீங்கள் வழங்கும் சிறப்பு சுருக்கங்கள், நீங்கள் பதிலாக அடுத்த அனைத்து வழி தட்டச்சு செய்ய வைத்து அடுத்த பயன்படுத்த n பயன்படுத்தலாம். இப்போது நான் ஹிட் n என்று, நான் அடுத்த செல்ல Enter அடிக்க முடியும் அதற்கு பதிலாக ஹிட் n உள்ளிடவும், n உள்ளிடவும், n உள்ளிடுக என்ற. நான் [நான்] 0 வரிசையில் அமைக்க என்று லூப் சில வகையான இருக்கிறேன் தெரிகிறது. அதை நான் லூப் இந்த வெளியே உடைத்து ஒருபோதும் நான் தெரிகிறது. நான் அச்சிட, அதனால் நான் 2 இருந்தால், நான் அடுத்த செல்லலாம். நான் அடுத்த செல்வேன் பிறகு, நான் 3, நான் அச்சிட வேண்டும். நான் அச்சிட வேண்டும் மற்றும் 3 ஆகும். அடுத்து, நான் அச்சிட, நான் 4. உண்மையில், அச்சு sizeof (வரிசை), மிகவும் வரிசை அளவு 20 ஆகும். சில சிறப்பு gdb ஐ கட்டளையை ஏதாவது நடக்கும் வரை சென்று அங்கு போல் ஆனால் அது தெரிகிறது. அது மாறி மதிப்பு ஒரு நிலை அமைப்பது போல. ஆனால் அது என்னவென்று நான் நினைவில் இல்லை. - நாங்கள் போகும் நீங்கள் நீங்கள் என்ன சொல்கிறீர்கள்? நீ என்ன கொண்டு வந்தாய்? [மாணவர்] காட்ட நான் சேர்க்க - >> சரி. அதனால் நான் உதவ முடியும் காண்பிக்க. நாம் தான் நான் காட்ட இருந்தால், அது எனக்கு மதிப்பு என்ன என்பது இங்கு வைக்கும் நான் ஒவ்வொரு முறையும் அதை அச்சிட இல்லை. நாம் தான் அடுத்த போகும் என்றால், நாம் 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 பார்க்க. ஏதாவது மோசமாக தவறாக நடக்கிறது, நான் 0 மீட்டமைக்கவும் வருகிறது. Buggy4.c பார்த்து, நாம் நடக்கும் என்று அனைத்து எண்ணாக வரிசை [5] பார்க்க; (நான் <= sizeof (வரிசை); நான் + நான் = 0) வரிசை [நான்] = 0; நாங்கள் இங்கே தவறு என்ன? ஒரு குறிப்பில் உள்ளது, நான் gdb ஐ buggy4 செய்து போது - பிரதான, ரன் உடைக்க நாம் - நான் அச்சு sizeof (வரிசை) தான் நான் இறுதியாக உடைத்து வேண்டும் நிலைமையை பார்க்க. நான் எங்கே? நான் ஓடி வந்தீங்க? நான் இன்னும் அறிவிக்க வில்லை. எனவே, sizeof (வரிசை) அச்சிட்டு என்று 20 தான் இது, என் வரிசை அளவு 5 என்பதால் எதிர்பார்க்கப்படுகிறது மற்றும் 5 முழுஎண்களின் தான் எனவே முழு விஷயம் sizeof (int) 4 இருக்கிறது, அங்கு 5 * sizeof (int) பைட்டுகள், இருக்க வேண்டும். எனவே sizeof (வரிசை) 20 ஆகும். இந்த என்ன வேண்டும்? [மாணவர்] sizeof (int) பிரிக்கப்படுகின்றன. >> சரி, / sizeof (int). இங்கே ஒரு பிரச்சினை இன்னும் தெரிகிறது. நான் இந்த இருக்க வேண்டும் என்று < அது மிகவும் அதிகமாக எப்போதும் இருந்து <மற்றும் ஒருபோதும் <=. இப்போது இந்த உண்மையில் உடைந்துவிட்டது ஏன் பற்றி யோசிக்கிறோம். யாரையும் நான் ஏன் வளைய ஒவ்வொரு மறு செய்கை மூலம் 0 யூகங்களை மீட்டமைத்துள்ளோம்? இங்கு என்ன நடக்கிறது என்று உள்ளே தான் [நான்] 0 அமைக்கப்பட உள்ளது என்று வரிசை ஆகும். எனவே எப்படியாவது, குறியீடு இந்த வரி நான் 0 அமைக்க நமது எண்ணாக ஏற்படுத்துகிறது. அதை நான் இந்த பகுதி நினைவக overriding ஏனென்றால் [மாணவர்] அது முடியவில்லை அது அணியின் அடுத்த உறுப்பு இருக்கிறது? நினைக்கிறார்கள் போது >> [Bowden] ஆமாம். எங்கள் அணி இறுதியில் தாண்டி செல்கிறோம் போது, நாம் overriding என்று எப்படியோ அந்த இடத்தை நான் மதிப்பு overriding. நாம் buggy4 பார்க்க போனால் அதனால், முக்கிய, ரன் உடைக்க அது என் முகவரி அச்சிட வேண்டும். இது bffff124 போல் தோன்றுகிறது. இப்போது வரிசைக்கு முகவரியை அச்சிட அனுமதிக்க [0]. 110. என்ன [1] பற்றி? 114. [2], 118. 11c, 120. வரிசை [5] bfff124 உள்ளது. வரிசை மிக [5] நான், அந்த வரிசை [5] நான், அதாவது அதே முகவரி. அவர்கள் அதே முகவரி இருந்தால், அவர்கள் தான் இருக்கிறது. எனவே வரிசை [5] அமைக்க போது 0 முதல், நாம் 0 நான் அமைப்பது. நீங்கள் ஸ்டேக் அடிப்படையில், இதை பற்றி யோசிக்க வேண்டும், int நான் ஸ்டேக் சில இடத்தை பெறுகின்றது அதாவது, முதலில் அறிவித்தார். பின் வரிசை [5] மிகவும் பின் 20 பைட்டுகள் ஸ்டேக்கில் ஒதுக்கப்படுகிறது, ஒதுக்கீடு. அதனால் நான் இந்த 20 பைட்டுகள் ஒதுக்கீடு செய்து, முதல் ஒதுக்கீடு. அதனால் நான், சரியான வரிசை முன் நடக்கும் ஏனெனில் வழி, போன்ற நான், தொழில்நுட்ப ஸ்டேக் கீழே வளரும் இடத்தில், கடந்த வாரம் கூறினார் ஒரு வரிசைக்கு சென்று போது குறியீட்டு, நாங்கள் உத்தரவாதம் என்று வரிசையில் 0th நிலை எப்போதும் வரிசையில் முதல் இடத்தை முன் நடக்கும். இந்த நான் கடந்த வாரம் வரைந்த எப்படி வகையான. கீழே நாம் முகவரியை 0 மற்றும் மேலே நாம் முகவரியை மேக்ஸ் என்று பாருங்கள். ஸ்டாக் எப்போதும் கீழே வளர்ந்து வருகிறது. நாம் நான் ஒதுக்க வேண்டும். நாம் முழு ஒதுக்க நான், நாம் தான் இங்கே முழு எனக்கு ஒதுக்கப்பட்ட விடும் வரை என்று பொருள். நாம் அந்த அடியில் அதாவது 5 முழுஎண்களின் எங்கள் அணி, ஒதுக்கி ஸ்டாக் கீழே வளர்ந்து பின்னர், அந்த 5 முழு ஒதுக்கீடு. ஆனால் அணிகளை எவ்வாறு காரணமாக, நாங்கள் உத்தரவாதம் என்று வரிசையில் முதல் நிலை எப்போதும் வரிசையில் இரண்டாவது விஷயம் குறைவான ஒரு முகவரி. எனவே வரிசை நிலையை 0 எப்போதும், நினைவக முதல் நடக்க வேண்டும் வரிசை நிலை 1 என்று பின் நடக்க வேண்டும், அதேசமயம் மற்றும் வரிசை நிலை 2, பின்னர் நடக்க வேண்டும் அந்த வரிசை நிலையை 0, கீழே இங்கே எங்கோ நடக்கும் பொருள் வரிசை நிலை 1 என்று மேலே நடக்கும் மேலே நகர்ந்து அதிகபட்ச முகவரியை இங்கு என்பதால் அதிக முகவரிகள் பொருள். ஏனெனில் கீழே இங்கே வரிசை [0] எனவே, வரிசை [1] இங்கு, வரிசை [2] இங்கு, வரிசை [3] இங்கு. நாம் இங்கே நான் எல்லா வழி வரை, முழு ஒதுக்கீடு எப்படி முன் கவனிக்க எங்கள் அணி மேலும் மேலும் நகரும் போது, நாம் நெருக்கமாக மற்றும் நெருக்கமாக எங்கள் முழு எனக்கு கிடைக்கும். அது மிக, இது எங்கள் அணி அப்பால் ஒரு நிலையில் தான், அந்த வரிசை [5] நடக்கிறது சரியாக நான் ஒதுக்கீடு வேண்டும் நடந்தது அங்கு முழு. அதனால் நாம் ஸ்டேக் இடத்தை தாக்கியதால் வேண்டும் நடக்கும் இடத்தில் விஷயம் அந்த முழு எனக்கு ஒதுக்கப்பட்ட, நாம் அந்த 0 அமைத்து கொண்டிருக்கிறோம். அந்த வேலை செய்யும். கேள்விகள்? Yeah. [மாணவர்] பரவாயில்லை. சரி. [மாணவர்] எப்படி பிழைகள் இந்த வகையான தவிர்ப்பது? பிழைகள் இந்த வகையான? உங்கள் நிரலாக்க மொழி போன்ற சி பயன்படுத்த வேண்டாம். சோதனை வரிசை எல்லைக்கு என்று ஒரு மொழி பயன்படுத்த. நீண்ட நீங்கள் கவனமாக இருக்கிறோம், நீங்கள் உங்கள் வரிசைக்கு எல்லைக்கு கடந்த சென்று தவிர்க்க வேண்டும். [மாணவர்] எனவே இங்கே உங்கள் வரிசைக்கு எல்லைக்கு கடந்த போது - [Bowden] விஷயங்கள் தவறாக நடக்கிறது தொடங்க அங்கு தான். >> [மாணவர்] ஓ, சரி. நீண்ட நீங்கள் உங்கள் வரிசை ஒதுக்கீடு நினைவகம் உள்ள தங்க, நீங்கள் நன்றாக இருக்கிறோம். ஆனால் சி இல்லை பிழை சோதனை செய்கிறது. நான் வரிசை செய்தால் [1000], அதை மகிழ்ச்சியுடன் தான் என்ன நடந்தாலும் மாற்ற முடியும் - அது அணியின் தொடக்கத்தில் செல்லும், அது பின்னர் 1000 நிலைகளை சென்று அதை 0 என அமைக்கிறது. அது ஓ, இந்த உண்மையில் இது 1000 விஷயங்கள் இல்லை என்று எந்த சோதனை செய்ய மாட்டார்கள். 1000, வழியில் நான் மாற்ற வேண்டும் அப்பால் உள்ளது ஜாவா அல்லது ஏதாவது நீங்கள் எல்லைக்கு குறியீட்டின் வரிசை கிடைக்கும் அதேசமயம் அல்லது எல்லைக்கு விதிவிலக்கு குறியீட்டு அவுட். அதிக மொழிகளில் நிறைய இந்த விஷயங்கள் இருக்கிறது அதனால் தான் நீங்கள் வரிசைக்கு எல்லைக்கு அப்பால் சென்றால், அங்கு, நீங்கள் தோல்வி நீங்கள் அடியில் இருந்து மாற்ற முடியாது என்று பின்னர் விஷயங்களை ஒரு விதிவிலக்கு பெற்று விட மோசமாக போய் நீங்கள் வரிசை இறுதியில் அப்பால் சென்று என்று. [மாணவர்] எனவே நாம் தான் மாற்ற வேண்டும் <= வெறும் > [Bowden] சரி. அது > [மாணவர்] ரைட். மேலும் கேள்விகள்? சரி. [மாணவர்] நான் ஒரு கேள்வி உள்ளது. >> சரி. [மாணவர்] உண்மையான வரிசை மாறி என்ன? [Bowden] போன்ற வரிசை என்ன? வரிசை தன்னை ஒரு சின்னமாக உள்ளது. அது நாம் குறிப்பிடும் அந்த 20 பைட்டுகள் தொடக்கத்தில் முகவரி ஆகும். நீங்கள் ஒரு சுட்டிக்காட்டி அதை பற்றி யோசிக்க முடியும், ஆனால் அதை தொடர்ந்து சுட்டிக்காட்டி இருக்கிறது. விரைவில் விஷயங்களை தொகுத்து செய்து என, மாறி வரிசை இனி இல்லை. [மாணவர்] எப்படி அது அணியின் அளவு கண்டறிய? வரிசை அளவு அந்த சின்னத்தை குறிக்கும் என்று தொகுதி அளவை குறிக்கிறது. நான் printf போல ("% p \ n", வரிசை) செய்யும் போது; அதை இயக்க அனுமதிக்க. நான் என்ன தவறு செய்தேன்? வரிசை 'வரிசை' இங்கே அறிவித்தார். ஓ, இங்கு. கணகண வென்ற சப்தம் புத்திசாலி, அதை நான் 5 கூறுகள் என வரிசை அறிவித்தார் என்று கவனிக்க நடக்கிறது ஆனால் நான் நிலையில் 1000 இல் அட்டவணையிடுவது. இந்த வெறும் மாறிலிகள் ஏனெனில் அது செய்ய முடியும். அது தான் நான் வரிசைக்கு எல்லைக்கு அப்பால் செல்கிறேன் என்று கவனித்தேன் இதுவரை செல்ல முடியும். ஆனால், நாம் இந்த தவறான இருக்கும் போது முன் அறிவிப்பு இது சாத்தியமான, நான் எடுத்து எப்படி பல மதிப்புகள் தீர்மானிக்க முடியாது அதை நான் வரிசை இறுதியில் அப்பால் என்று தீர்மானிக்க முடியாது. என்று தான் புத்திசாலி என்ற கணகண வென்ற சப்தம் தான். ஆனால் இப்போது buggy4 செய்ய. எனவே நான் தவறாக வேறு என்ன செய்கிறேன்? உட்குறிப்பாக நூலகம் செயல்பாடு 'printf' என்று அறிவித்தார். நான் # சேர்க்க வேண்டும் போகிறேன். சரி. இப்போது buggy4 இயங்கும். இப்படி வரிசை மதிப்பு அச்சிடும் நான் ஒரு சுட்டிக்காட்டி அதை அச்சிட்டு, இங்கே இல்லை இந்த மாதிரி என்று அச்சிட்டு ஒன்று - bfb8805c - சில முகவரி இது அந்த ஸ்டேக்-ish பகுதியில் தான். , அணி தன்னை ஒரு சுட்டிக்காட்டி இருக்கிறது, ஆனால் அது ஒரு உண்மையான சுட்டிக்காட்டி அல்ல வழக்கமான சுட்டிக்காட்டி இருந்து நாம் மாற்ற முடியும். வரிசை சில மாறிலி. நினைவகம் 20 தொகுதிகள் முகவரியை 0xbfb8805c மணிக்கு தொடங்கும். இந்த முகவரி மூலம் மிகவும் bfb8805c +20- அல்லது நான் -20 நினைக்கிறேன் - இந்த வரிசை ஒதுக்கீடு நினைவகம் அனைத்து ஆகும். வரிசை, மாறி தன்னை எங்கேயும் சேமிக்கப்படும். நீங்கள் ஒடுக்குவதற்கான போது, ஒடுக்கி - அது கை அலை - அது அணியின் வேண்டும் என்று அங்கு ஆனால் தொகுப்பி மட்டும் பயன்படுத்தும். அந்த வரிசையில் துவங்குகிறது அது தெரியும் எனவே அது எப்போதும் தான் ஆரம்பத்தில் இருந்து ஈடு அடிப்படையில் விஷயங்களை செய்ய முடியும். அது அணியின் பிரதிநிதியாக ஒரு மாறி தன்னை தேவையில்லை. ஆனால் நான் முழு எண்ணாக * ப = வரிசை போன்ற ஏதாவது போது; இப்போது, ப என்று வரிசை சுட்டி காட்டும் ஒரு சுட்டிக்காட்டி உள்ளது இப்போது ப உண்மையில் ஸ்டேக்கில் இருக்கிறது. நான் ப மாற்ற இலவச இருக்கிறேன். நான் ப = malloc செய்ய முடியும். அதை முதலில் வரிசை சுட்டி காட்டினார்; இப்போது குவியல் சில இடத்தில் உள்ளது. நான் வரிசை = malloc செய்ய முடியாது. கணகண வென்ற சப்தம் புத்திசாலி இருந்தால், அதை சரியாக பேட் ஆஃப் என்னை கத்துவார்கள். உண்மையில், நான் gcc இந்த என்று அழகாக தெரியும். எனவே வரிசை வகை 'எண்ணாக [5]' காரணமாக அல்ல. நீங்கள் ஒரு வரிசை வகை ஏதாவது ஒதுக்க முடியாது வரிசை ஒரு நிலையான என்பதால். அது குறிப்புகள் அந்த 20 பைட்டுகள் ஒரு சின்னமாக உள்ளது. நான் அதை மாற்ற முடியாது. [மாணவர்] மற்றும் வரிசை அளவு அங்கு சேமிக்கப்படுகிறது? [Bowden] இது எங்கு சேமிக்க இல்லை. அதை ஒடுக்குவதற்கான தான் போது அது. எனவே வரிசை அளவு அங்கு சேமிக்கப்படுகிறது? நீங்கள் மட்டும் வரிசை தன்னை அறிவித்தார் என்று செயல்பாடு உள்ளே sizeof (வரிசை) பயன்படுத்தலாம். நான் சில செயல்பாடு, foo, அதை நான் செய்ய நீங்கள் (int வரிசை []) printf ("% d \ n", sizeof (வரிசை)); பின்னர் கீழே இங்கே நான் foo (வரிசை) என்று; இந்த செயல்பாடு உள்ளே - அது இயங்க அனுமதிக்க. இந்த மீண்டும் புத்திசாலி என்று கணகண வென்ற சப்தம் இல்லை. அதை என்னிடம் அந்த அணியின் செயல்பாடு அளவுரு மீது sizeof 'எண்ணாக *' அளவு வரும். அதை நான் நடக்க என்ன இல்லை என்றால் இந்த பிழை இருக்கும். அது உண்மையில் Werror அணைக்க வேண்டும். எச்சரிக்கை. எச்சரிக்கைகள் நன்றாக இருக்கிறார்கள். இது ஒரு எச்சரிக்கை என்று அது இன்னும் நீண்ட தொகுக்கும். . / A.out 4 அச்சிட வேண்டும். உருவாக்கப்படும் என்று எச்சரிக்கை தவறு என்ன ஒரு தெளிவான காட்டி உள்ளது. இந்த எண்ணாக வரிசை தான் sizeof (int *) அச்சிட வேண்டும். நான் இங்கே உள்ள வரிசை [5] வைத்து கூட, அது இன்னும் ஒரு sizeof (int *) அச்சிட நடக்கிறது. எனவே விரைவில் நீங்கள், ஒரு செயல்பாடு அதை கடந்து என வரிசைகள் மற்றும் குறிப்புகள் இடையில் உள்ள வேறுபாடு எதுவுமில்லை. இந்த, ஸ்டாக் அறிவித்தார் என்று ஒரு வரிசை இருக்கும் நடக்கிறது ஆனால் விரைவில் நாம், அந்த மதிப்பு கடந்து என்று 0xbf அபத்தம், அபத்தம், இந்த செயல்பாடு ஒரு அபத்தம், இந்த சுட்டியை ஸ்டேக் அந்த வரிசைக்கு சுட்டிக்காட்டியுள்ளது. Sizeof மட்டுமே வரிசை அறிவித்தார் என்று விழாவில் பொருந்தும் என்று பொருள் என்று, இது பொருள் என்று நீங்கள், இந்த செயல்பாடு ஒடுக்குவதற்கான போது கணகண வென்ற சப்தம் இந்த செயல்பாடு மூலம் செல்லும் போது, அது அணியின் அளவு 5 ஒரு எண்ணாக வரிசை என்று காண்கிறார். எனவே அது sizeof (வரிசை) காண்கிறது. அந்த 20 தான். அந்த sizeof அடிப்படையில் கிட்டத்தட்ட எல்லா நேரங்களில் எவ்வாறு உண்மையில் தான். Sizeof ஒரு செயல்பாடு இல்லை, இது ஒரு ஆபரேட்டர் தான். நீங்கள் sizeof செயல்பாடு அழைக்க கூடாது. Sizeof (int), ஒடுக்கி அந்த 4 மொழிபெயர்க்கும். புரிந்ததா? சரி. [மாணவர்] எனவே முக்கிய மற்றும் foo உள்ள sizeof (வரிசை) இடையே உள்ள வேறுபாடு என்ன? நாம் வகை எண்ணாக * கொண்டது sizeof (வரிசை),, நீங்கள் சொல்கிறீர்கள் இது ஏனெனில் வரிசை கீழே இங்கே இல்லை வகை எண்ணாக * ஒரு அதேசமயம், அது ஒரு முழு எண்ணாக வரிசை தான். [மாணவர்] எனவே நீங்கள் வரிசை [] பதிலாக எண்ணாக * வரிசையில் அளவுரு செய்தால், இப்போது அது ஒரு சுட்டிக்காட்டி ஏனென்றால் நீங்கள் இன்னும் வரிசை மாற்ற முடியும் என்று அர்த்தம் என்று? [Bowden] இந்த போலவே? >> [மாணவர்] சரி. நீங்கள் இப்போது செயல்பாடு உள்ள வரிசை மாற்ற முடியும்? [Bowden] நீங்கள் இருவரும் சந்தர்ப்பங்களில் வரிசை மாற்ற முடியும். இந்த வழக்குகளை இரண்டிலும் நீங்கள் வரிசை [4] = 0 என்று இலவசம். [மாணவர்] ஆனால் நீங்கள் வேறு ஏதாவது வரிசையில் புள்ளி வைக்க முடியும்? [Bowden] ஓ. Yeah. அல்லது வழக்கு - >> [மாணவர்] சரி. [Bowden] வரிசை [] மற்றும் ஒரு முழு எண்ணாக * வரிசை இடையில் உள்ள வேறுபாடு, இல்லை. நீங்கள் இங்கே சில பல பரிமாண வரிசை பெற முடியும் சில வசதியான தொடரியல், ஆனால் அது இன்னும் ஒரு சுட்டிக்காட்டி இருக்கிறது. இந்த வரிசையில் செய்ய இலவச என்று பொருள் = malloc (sizeof (int)); இப்போது வேறு எங்கோ சுட்டி. ஆனால், இந்த நிரந்தரமாக மற்றும் எப்போதும் வேலை எப்படி இருக்கும் இது மூலம் இந்த வரிசை மாறி வேறு ஏதாவது சுட்டி இது, வாதம் நகலை தான் இங்கே இந்த வரிசை கீழே மாற்ற முடியாது அந்த வாதம் ஒரு சுட்டிக்காட்டி அல்ல. உண்மையில், அது போலவே தான் இன்னும் குறிப்பிடுதலாக - நாம் ஏற்கனவே அச்சிடும் வரிசை அச்சிட்டு என்ன பார்த்தேன் - என்ன நாம் வரிசைக்கு முகவரி அல்லது வரிசைக்கு முகவரி முகவரியை அச்சிட வேண்டும் அந்த ஒன்று? இந்த ஒரு தவிர்க்க வேண்டும். சரி. இந்த நன்றாக. அது இப்போது. / A.out இயங்கும். அச்சு அணி, பின் வரிசைக்கு முகவரியை அச்சிடுதல், அதையே தான். வரிசை தான் இல்லை. அதை நீங்கள் வரிசை அச்சிடும் போது, அந்த 20 பைட்டுகள் குறிக்கும் சின்னமாக அச்சிடும் நீங்கள் தெரிகிறது. வரிசைக்கு முகவரியை அச்சிடுதல், நன்றாக, வரிசை இல்லை. அது ஒரு முகவரி இல்லை, அதனால் தான் அந்த 20 பைட்டுகள் முகவரி அச்சிடுகிறது. விரைவில் நீங்கள் கீழே தொகுக்க என, உங்கள் தொகுக்கப்பட்ட buggy4 போலவே. / A.out வரிசை எதுவுமில்லை. சுட்டிகள் உள்ளன. வரிசைகள் வேண்டாம். வரிசை குறிக்கும் நினைவகம் தொகுதிகள் இன்னமும் உள்ளன ஆனால் மாறி வரிசை மற்றும் அந்த வகை மாறிகள் இல்லை. அந்த வரிசைகள் மற்றும் குறிப்புகள் இடையே முக்கிய வேறுபாடுகள் போன்ற விரைவில் நீங்கள் செயல்பாடு அழைப்புகளை என, எந்த வித்தியாசமும் கிடையாது. ஆனால் உள்ளே வரிசை தன்னை அறிவித்தார் என்று செயல்பாடு, sizeof வேறு வேலை நீங்கள் பதிலாக வகை அளவு தொகுதிகள் அளவு அச்சிடும் நீங்கள் இருந்து, அது ஒரு சின்னம் தான் நீங்கள் அதை மாற்ற முடியாது. விஷயம் என்னவென்றால், முகவரி அச்சிடும் அதையே அச்சிடுகிறது. மற்றும் அது மிகவும் அதிகம். [மாணவர்] நீங்கள் ஒரு முறை சொல்ல முடியுமா? நான் எதையோ மிஸ். வரிசைக்கு அச்சிடும் வரிசை மற்றும் முகவரி, அதையே அச்சிடுகிறது நீங்கள் சுட்டிக்காட்டி முகவரி மற்றும் ஒரு சுட்டிக்காட்டி அச்சிட என்றால் அதேசமயம், ஒன்று நீங்கள் சுட்டி நீங்கள் என்ன முகவரி அச்சிடுகிறது, மற்ற ஸ்டேக்கில் சுட்டிக்காட்டி முகவரி அச்சிடுகிறது. நீங்கள் ஒரு சுட்டிக்காட்டி மாற்ற முடியும்; நீங்கள் ஒரு வரிசை சின்னமாக மாற்ற முடியாது. மற்றும் sizeof சுட்டிக்காட்டி என்று சுட்டிக்காட்டி வகை அளவு அச்சிட வேண்டும். எனவே எண்ணாக * ப sizeof (ப), 4 அச்சிட போகிறது ஆனால் எண்ணாக வரிசை [5] அச்சு sizeof (வரிசை) 20 அச்சிட வேண்டும். [மாணவர்] எனவே எண்ணாக வரிசை [5] 20 அச்சிட வேண்டும்? >> ஆமாம். ஏன் உள்ளே buggy4 அதை sizeof (வரிசை) இருக்கும் போது அந்த இந்த நான் <20 செய்கிறேன், இதில் நாம் என்ன இல்லை. நாம் நான் <5 வேண்டும். >> [மாணவர்] சரி. [Bowden] பின்னர் விரைவில் நீங்கள் செயல்பாடுகளை கடந்து செல்லும் தொடங்கும் என, நாம் செய்தால் எண்ணாக * ப = வரிசை; இந்த செயல்பாடு உள்ளே, நாம் அடிப்படையில், அதே வழிகளில் p மற்றும் வரிசை பயன்படுத்தலாம் sizeof பிரச்சனை மற்றும் மாறும் பிரச்சனை தவிர. ஆனால் ப [0] = 1; வரிசை [0] = 1 என்று அதே தான்; மற்றும் விரைவில் நாம் foo (வரிசை) என்று குறிப்பிடப்படுகின்றன; அல்லது foo (ப); foo செயல்பாடு உள்ளே, இந்த முறை அதே அழைப்பு. இந்த இரண்டு அழைப்புகள் இடையே எந்த வித்தியாசமும் இல்லை. அந்த நல்ல எல்லோரும்? சரி. நாங்கள் 10 நிமிடங்கள் வேண்டும். நாம், இந்த ஹாக்கர் Typer திட்டத்தின் மூலம் பெற முயற்சி செய்கிறேன் கடந்த ஆண்டு அல்லது ஏதாவது வெளியே வந்து இந்த இணையதளத்தில்,. நீங்கள் தோராயமாக தட்டச்சு மற்றும் அதை அச்சிடுகிறது போல் தான் இருக்க வேண்டும் - என்ன கோப்பு அதை ஏற்ற வேண்டும் நடந்தால் நீங்கள் தட்டச்சு போல தெரிகிறது என்ன. அதை இயக்க அமைப்பு குறியீடு சில வகையான தெரிகிறது. என்று நாம் நடைமுறைப்படுத்த வேண்டும். நீங்கள் hacker_typer என்ற பைனரி இயக்க வேண்டும் அந்த கோப்பு, ஒரு வாதத்தை எடுத்து "ஹேக்கர் வகை." இயங்கக்கூடிய இயங்கும் திரை அழிக்க வேண்டும் பின்னர் பயனர் அச்சகங்கள் ஒரு முக்கிய ஒவ்வொரு முறை கடந்து-ல் இருந்து ஒரு பாத்திரம் அவுட் அச்சிட. நீங்கள் அழுத்தினால் என்ன முக்கிய எனவே, அதை எறியுங்கள் பதிலாக கோப்பு ஒரு பாத்திரம் அச்சிட வேண்டும் அந்த வாதம் ஆகும். நான் அழகாக நாம் தெரிந்து கொள்ள வேண்டும் போகிறோம் விஷயங்கள் என்ன சொல்கிறேன். ஆனால் நாம் termios நூலகம் அவுட் சரிபார்க்க வேண்டும். நான் என் வாழ்நாள் முழுவதும் இந்த நூலகத்தை பயன்படுத்த வேண்டும், அது மிகவும் குறைந்த நோக்கங்களுக்காக உள்ளது. ஆனால் இந்த நாம் வெற்றி தன்மையை எறியுங்கள் பயன்படுத்தலாம் நூலகம் போகிறது நீங்கள் தரமான முறையில் தட்டச்சு செய்யும் போது எனவே hacker_typer.c, மற்றும் நாம் # சேர்க்க வேண்டும் போகிறோம். Termios man பக்கத்தை பார்த்து - I'm இது முனையத்தில் OS அல்லது ஏதாவது யோசிக்காமல் - நான் அதை படிக்க தெரியாது. இந்த பார்த்து, இந்த 2 கோப்புகளை சேர்க்க, எனவே நாம் அதை செய்யலாம். முதல் விஷயம் முதல், நாம் திறக்க வேண்டும் கோப்பு ஒரு ஒற்றை வாதம், ஒரு எடுக்க வேண்டும். அதனால் நான் என்ன செய்ய வேண்டும் என்று விரும்புகிறீர்கள்? எப்படி நான் ஒரு வாதம் இருக்கிறது பார்க்கவும்? [மாணவர்] argc அது சமமாக இருந்தால். >> [Bowden] சரி. நீங்கள் (argc = 2) printf ("பயன்பாடு:% s [கோப்பை திறக்க]"). நான் ஒரு இரண்டாவது வாதம் இல்லாமல் இந்த இயக்க என்றால் இப்போது - ஓ, நான் புதிய வரி வேண்டும் - நீங்கள் சொல்வது பயன்பாடு பார்க்கலாம்:. / hacker_typer, பின்னர் இரண்டாவது வாதம் நான் திறக்க வேண்டும் கோப்பு இருக்க வேண்டும். இப்போது நான் என்ன செய்ய? நான் இந்த கோப்பை படிக்க வேண்டும். எப்படி நான் ஒரு கோப்பை படிக்க? [மாணவர்] நீங்கள் முதல் திறக்க. >> சரி. எனவே fopen. Fopen என்ன இருப்பான்? [மாணவர்] கோப்புப்பெயர். >> [Bowden] கோப்புப்பெயர் argv [1] போகிறது. [மாணவர்] பிறகு என்ன நீங்கள் அதை செய்ய விரும்புகிறேன், எனவே - >> [Bowden] சரி. நீங்கள் நினைவில் இல்லை என்றால், அதனால், நீங்கள், மனிதன் fopen செய்ய மட்டுமே முடியும் அது பாதை கோப்பு எங்கே ஒரு கான்ஸ்ட் எரிப்பதை * பாதை இருக்க போகிறது அங்கு, கான்ஸ்ட் எரிப்பதை * முறை. நீங்கள் முறை என்ன நினைவில் இல்லை நேர்ந்தால், நீங்கள் முறை பார்க்க முடியாது. மனிதன் பக்கங்கள் உள்ளே, சாய்வு தன்மையை நீங்கள் விஷயங்களை தேட பயன்படுத்தலாம் என்று. அதனால் நான் முறையில் தேட / முறையில் தட்டச்சு. n மற்றும் N நீங்கள் தேடல் போட்டிகள் மூலம் சுழற்சி பயன்படுத்தலாம் என்ன. இங்கே ஒரு சரத்திற்கு வாதம் முறை புள்ளிகள் நிதி பின்வரும் காட்சிகளில் ஒன்று தொடங்கி. வாசிப்புக்கு r எனவே, திறந்த உரை கோப்பு. என்று நாம் செய்ய வேண்டும். படித்து, மற்றும் நான் அந்த சேமிக்க வேண்டும் என்று. தான் ஒரு கோப்பு * போகிறது. இப்போது நான் என்ன செய்ய வேண்டும்? எனக்கு ஒரு இரண்டாவது கொடுக்க. சரி. இப்போது நான் என்ன செய்ய வேண்டும்? [மாணவர்] அதை NULL என்று பாருங்கள். >> [Bowden] சரி. நீங்கள் ஒரு கோப்பை திறக்க எந்த நேரத்திலும், நீங்கள் வெற்றிகரமாக திறக்க முடியும் என்பதை உறுதிப்படுத்தி கொள்ளுங்கள். நான் முதல் என் தற்போதைய அமைப்புகளை படிக்க வேண்டும், அங்கு இப்போது நான் அந்த termios பொருள் செய்ய வேண்டும் மற்றும் ஏதாவது ஒரு அந்த சேமிக்க, நான் என் அமைப்புகளை மாற்ற வேண்டும் , நான் தட்டச்சு எந்த கேரக்டர் கைவிட பின்னர் நான் அந்த அமைப்புகளை மேம்படுத்த வேண்டும். பின்னர் நிகழ்ச்சி முடிவில், நான் எனது அசல் அமைப்புகளை மீண்டும் மாற்ற வேண்டும். எனவே struct வகை termios இருக்க போகிறது, நான் அந்த இரண்டு வேண்டும் போகிறேன். முதல் ஒரு, என் current_settings போகிறது பின்னர் அவர்கள் என் hacker_settings போகிறாய். முதல், நான், என் தற்போதைய அமைப்புகளை சேமிக்க வேண்டும் போகிறேன் நான், hacker_settings மேம்படுத்த வேண்டும் போகிறேன் பின்னர் என் திட்டம் இறுதியில் வழி, நான் தற்போதைய அமைப்புகளை மாற்றியமைக்க வேண்டும். எனவே, நாம் மனிதன் termios வேலை என்று வழி, தற்போதைய அமைப்புகளை சேமிப்பதில். நாம் இந்த எண்ணாக tcsetattr, int tcgetattr என்று பார்க்க. நான் அதன் சுட்டியை ஒரு termios struct உள்ள கடக்க. இந்த இருக்கும் வழி - நலன் ஏற்கனவே செயல்பாடு என்று என்ன மறந்து. நகலெடுத்து ஒட்டுக. Tcgetattr எனவே, நான், நான் தகவல் சேமிப்பு என்று நான் struct உள்ள கடக்க வேண்டும் இதில், current_settings போகிறது முதல் வாதத்தை நான் பண்புகளை காப்பாற்ற வேண்டும் விஷயம் கோப்பு விளக்கி இருக்கிறது. என்ன கோப்பு விளக்கியை நீங்கள் ஒரு கோப்பை திறக்க எந்த நேரத்தில் தான், அது ஒரு கோப்பு விளக்கியை பெறுகிறார். நான் fopen argv [1], அதை நீங்கள் குறிப்பிடும் எந்த ஒரு கோப்பு விளக்கியை பெறுகிறார் நீ அதை எழுத படிக்க வேண்டும் போதெல்லாம். என்று நான் இங்கே பயன்படுத்த வேண்டும் கோப்பு விளக்கியை இல்லை. நீங்கள் முன்னிருப்பாக இருக்கும் மூன்று கோப்பு விளக்கிகளை உள்ளன இது, நிலையான அவுட், மற்றும் நிலையான பிழை தரமானதாக இருக்கும். முன்னிருப்பாக, நான் அதை 0, நிலையான அவுட் 1, மற்றும் நிலையான பிழை 2 ஆகும் நிலையான நினைக்கிறேன். எனவே நான் அமைப்புகளை மாற்ற வேண்டுமா? நான், நான் ஒரு கேரக்டர் வெற்றி போதெல்லாம் அமைப்புகளை மாற்ற வேண்டும் நான் அதை பதிலாக, திரையில் அச்சடிப்பதை தாரை அந்த பாத்திரத்தை தூக்கி வேண்டும். என்ன ஸ்ட்ரீம் - - நிலையான அவுட், அல்லது நிலையான பிழை, நிலையான நான் விசைப்பலகை உள்ள தட்டச்சு போது எல்லாம் பதில்? >> >> சரி உள்ளே [மாணவர்] ஸ்டாண்டர்ட். எனவே நான் ஒன்று 0 செய்ய முடியும் அல்லது நான் stdin செய்ய முடியும். நான் உள்ளே தரத்தின் current_settings வருகிறது இப்போது நான், அந்த அமைப்புகளை மேம்படுத்த வேண்டும் எனவே முதல் நான் என் current_settings என்ன hacker_settings கொண்டு நகலெடுக்க வேண்டும். மற்றும் structs வேலை எப்படி அதை நகலெடுத்து. நீங்கள் எதிர்பார்ப்பதை போல இந்த அனைத்து துறைகளில் நகலெடுக்கிறது. இப்போது நான் துறைகளில் சில புதுப்பிக்க வேண்டும். Termios பார்த்து, நீங்கள் இந்த நிறைய மூலம் படிக்க வேண்டும் நீங்கள் பார்க்க வேண்டும் என்று பார்க்க, ஆனால் நீங்கள் பார்க்க வேண்டும் போகிறோம் கொடிகள், எதிரொலி ஆகும் எனவே எக்கோ உள்ளீடு எழுத்துக்கள் எதிரொலி. முதல் நான் அமைக்க வேண்டும் - துறைகளில் என்ன ஏற்கனவே மறந்து நலன். இந்த struct போல் உள்ளது. உள்ளீடு முறைகள் அதனால் நாம் மாற்ற வேண்டும் என்று. நாம் என்று நாம் மாற்ற வேண்டும் என்ன என்பதை தீர்வு பார்க்க வேண்டும். நாம் இந்த வழியாக பார்க்க தேவைப்படும் தடுக்க lflag மாற்ற வேண்டும். நாங்கள் உள்ளூர் முறைகள் மாற்ற வேண்டும். நீங்கள் எல்லாம் எங்கிருந்து புரிந்து கொள்ள இந்த முழு விஷயத்தையும் மூலம் படிக்க வேண்டும் நாம் மாற்ற வேண்டும் என்று. ஆனால் அதை நாம் மாற்ற வேண்டும் போகிறோம், அங்கு உள்ளூர் முறைகள் உள்ளே தான். எனவே hacker_settings.cc_lmode இது என்று என்ன இருக்கிறது. c_lflag. நாம் பிட்நிலை செயற்குறிகள் பெற இந்த ஆகும். நாம் நேரம் வெளியே என்ன இருக்கிறது, ஆனால் நாம் அது உண்மையான விரைவான வழியாக செல்லலாம். நாம் பிட்நிலை செயற்குறிகள் பெற இந்த, உள்ளது நான் நினைக்கிறேன் நான் ஒரு முறை நீண்ட முன்பு என்று நீங்கள் கொடிகள் கையாள்வதில் தொடங்கும் போது, நீங்கள் பிட்வைஸ் ஆபரேட்டர் நிறைய பயன்படுத்தி கொள்ள போகிறோம். கொடி ஒவ்வொரு பிட் நடத்தை ஒருவித ஒத்துள்ளது. இங்கு, இந்த கொடி அவர்கள் அனைவரும் வேறு அர்த்தம் அங்கு பல்வேறு விஷயங்கள், ஒரு கூட்டத்தை உள்ளது. ஆனால் நான் என்ன செய்யவேண்டும் என்று நான் எதிரொலி தொடர்புடைய பிட் அணைக்க. அதனால் திரும்ப என்று நான் ஆஃப் & = ¬ எக்கோ. உண்மையில், நான் அதை tECHO அல்லது வேறு ஏதாவதா நினைக்கிறேன். நான் மீண்டும் சரிபார்த்து போகிறேன். நான் அதை termios முடியும். இது எதிரொலி. எக்கோ ஒரு பிட் போகிறது. ¬ எக்கோ அனைத்து கொடிகள் உண்மை அமைக்கப்பட்டுள்ளது அதாவது, அனைத்து துணுக்குகள் 1 அமைக்கப்பட்டுள்ளது அர்த்தம் என்ன எக்கோ பிட் தவிர. இந்த என் உள்ளூர் கொடிகள் முடித்து, அது தற்போது உண்மை அமைக்க என்று அனைத்து கொடிகள் பொருள் இன்னும் உண்மை அமைக்கப்படும். என் எக்கோ கொடி உண்மை அமைக்கப்பட்டால், இந்த அவசியம் எக்கோ கொடி மீது பொய்யான அமைக்கப்படுகிறது. எனவே குறியீடு இந்த வரியை மட்டும் எக்கோ கொடி இருந்து சுழல்கிறது. குறியீடு மற்ற வரிகளை, நான் அவர்களுக்கு நேரம் வட்டி நகலெடுத்து பின்னர் அவற்றை விளக்க வேண்டும். கரைசலில், அவர் 0 கூறினார். அதை வெளிப்படையாக stdin என்று கூறுவது நல்லது. இங்கே ICANON | நான் எக்கோ செய்கிறேன் என்று பாருங்கள். ICANON நியமன முறையில் அதாவது தனி ஒன்று, குறிக்கிறது. நீங்கள் கட்டளை வரி அவுட் தட்டச்சு போது என்ன நியமன முறை என்பது, பொதுவாக உள்ளது நீங்கள் NEWLINE ஹிட் வரை உள்ள நிலையான எதையும் செயல்படுத்த முடியாது. எனவே நீங்கள் GetString போது, நீங்கள் NEWLINE வெற்றி பின்னர், பொருட்களை ஒரு கொத்து தட்டச்சு. அது உள்ளே தரத்தை அனுப்பும் போது தான் இயல்புநிலை தான். நான், நீ அழுத்தவும் இப்போது ஒவ்வொரு தன்மையை நியமன முறையில் அணைக்க போது என்ன, இந்த விஷயங்களை செயல்படுத்த மெதுவாக தான் வழக்கமாக கெட்ட வகையான இது, பதப்படுத்தப்பட்ட இது முழு கோடுகள் அதை தாங்குவதற்கு நல்லது ஏன் இது. ஆனால் நான் ஒவ்வொரு தன்மையை செயல்படுத்த வேண்டும் நான் என்னை NEWLINE அடிக்க அதை காத்திருக்க விரும்பவில்லை இருந்து இது அனைத்து கதாபாத்திரங்கள் செயல்படுத்தி முன் நான் தட்டச்சு. இந்த நியமன முறையில் இருந்து சுழல்கிறது. அது உண்மையில் எழுத்துக்கள் செயல்படுத்தி போது இந்த விஷயங்களை தான் அர்த்தம். , நான் அதை தட்டச்சு நான் அவற்றை செயல்படுத்த; இந்த உடனடியாக அவற்றை செயல்படுத்த வேண்டும். இந்த, நிலையான என் அமைப்புகளை மேம்படுத்தும் இது விழா மற்றும் TCSA என்பது இப்போது அது. ஸ்ட்ரீம் தற்பொழுது என்று எல்லாம் செயலாக்கப்படும் வரை மற்ற விருப்பங்களை காத்திருக்க வேண்டும். உண்மையில் இல்லை. இப்போது என் அமைப்புகள் hacker_typer_settings தற்போது என்ன என்று மாற்ற. நான் அதை hacker_settings என்று நினைக்கிறேன், எனவே அதை மாற்ற வேண்டும். Hacker_settings எல்லாவற்றையும் மாற்ற. இப்போது எங்கள் திட்டம் இறுதியில் நாம் மாற்றியமைக்க வேண்டும் போகிறாய் normal_settings உள்ளே தற்போது என்ன செய்ய, இது வெறும் & normal_settings இருக்க போகிறது. நான் முதலில் அதை பெறுவதில் இருந்து என் normal_settings எந்த மாறவில்லை கவனிக்க. பின்னர் அவர்கள் மீண்டும் மாற்ற, நான் முடிவில் அவர்கள் திரும்பி செல்லும். இந்த மேம்படுத்தல் இருந்தது. சரி. உள்ளே இங்கே இப்போது நான் கால வட்டி குறியீடு விளக்க வேண்டும். அது மிகவும் குறியீடு அல்ல. நாம் கோப்பு ஒரு பாத்திரம் படிக்க பார்க்க. நாம் அது f என்று. இப்போது நீங்கள் மனிதன் fgetc முடியும், ஆனால் எப்படி fgetc வேலை நடக்கிறது அதை நீங்கள் படிக்க EOF அந்த பாத்திரத்தை திரும்ப நடக்கிறது என்பது, எந்த கோப்பு அல்லது சில பிழை நடக்கிறது இறுதியில் ஒத்துள்ளது. நாம், கோப்பு ஒரு ஒற்றை தன்மை வாசிக்க தொடர்ந்து, தேடுகிறது நாம் வாசிக்க எழுத்துக்கள் ரன் அவுட் வரை. நாங்கள் செய்கிறோம் போது மற்றும், நாம் உள்ளே நிலையான ஒரு ஒற்றை தன்மையை காத்திருக்க ஒவ்வொரு முறை நீங்கள், கட்டளை வரியில் ஏதோ தட்டச்சு உள்ளே நிலையான இருந்து ஒரு எழுத்தை வாசித்து என்று பின்னர் putchar நாங்கள் கோப்பில் நிலையான அவுட் இங்கே வரை படிக்க எரிப்பதை வைக்க போகிறது. நீங்கள் மனிதன் putchar முடியும், ஆனால் இது வழக்கமான வெளியே வைத்து கொண்டு, அந்த எழுத்தை அச்சிடுகையில். அதே கருத்து; நீங்கள் தான் printf ("% கேட்ச்", கேட்ச்) செய்ய. என்று நம் வேலை மொத்த செய்ய நடக்கிறது. நாம் என்ன செய்ய வேண்டும் என்று நீங்கள் கடைசியாக ஒன்று தான் எங்கள் கோப்பு fclose உள்ளது. நீங்கள் fclose என்றால், ஒரு நினைவக கசிவு தான். நாம் முதலில் திறந்து கோப்பு fclose வேண்டும், மற்றும் நான் நினைக்கிறேன். நாம் செய்தால், நான் ஏற்கனவே பிரச்சினைகளை கிடைத்தது. பார்க்கலாம். இது பற்றி புகார் செய்தார்? எதிர்பார்க்கப்படுகிறது 'எண்ணாக' ஆனால் வாதம் வகை 'struct _IO_FILE *' என்பது. அந்த வேலை செய்தால் நாம் பார்க்கலாம். ஒரே C99 அனுமதி. Augh. சரி, hacker_typer செய்ய. இப்போது நாம் மிகவும் பயனுள்ளதாக விளக்கங்கள் கிடைக்கும். எனவே அண்டிக்ளேர்டு அடையாளம் 'normal_settings' பயன்படுத்தும். நான் அதை normal_settings அழைக்க வில்லை. நான் அதை current_settings என்று. எனவே அந்த அனைத்து மாற்ற வேண்டும். இப்போது வாதம் செல்லும். நான் இப்போது இந்த 0 செய்கிறேன். சரி. . / Hacker_typer cp.c. நான் கூட ஆரம்பத்தில் திரையில் தெளிவாக இல்லை. ஆனால் நீங்கள் திரையில் தெளிவாக எப்படி பார்க்க கடந்த பிரச்சனை தொகுப்பு திரும்பி பார்க்க முடியும். இது சில கதாபாத்திரங்களின் அச்சிடுதல் இந்த நான் என்ன செய்யவேண்டும் என்று செய்து வருகின்றனர். சரி. இந்த பதிலாக stdin 0 இருக்க வேண்டும் ஏன் நினைத்து, இது #, 0 வரையறுக்க வேண்டும் இந்த என்று புகார் - நான் கோப்பு விளக்கிகளை இல்லை என்று ஆனால் நீங்கள் உங்கள் FILE * போது முன், ஒரு கோப்பு விளக்கியை, ஒரு ஒற்றை முழு ஒரு கோப்பு * அது தொடர்புடைய விஷயங்களை ஒரு மொத்தமாக கொண்டுள்ளது, அதே சமயம். நாம் பதிலாக stdin 0 சொல்ல வேண்டும் காரணம் அந்த stdin கோப்பு விளக்கியை 0 குறிக்கும் என்று தான் சுட்டி காட்டும் எந்த ஒரு கோப்பு * உள்ளது. அதனால் கூட இங்கு நான் fopen செய்யும் போது (argv [1], நான் மீண்டும் ஒரு கோப்பை * வருகிறது. ஆனால் எங்கோ கோப்பு * அந்த கோப்பு கோப்பு விளக்கியை தொடர்பான ஒரு விஷயம். நீங்கள் திறந்த man பக்கத்தை பார்த்து இருந்தால், நான் உனக்கு மனிதன் 3 திறந்த செய்ய வேண்டும் என்று - இல்லை - மனிதன் 2 திறந்த - ஆமாம். நீங்கள் திறந்த ஐந்து பக்கம் பார்த்தால், திறந்த, ஒரு கீழ் நிலை fopen போல் அது உண்மையான கோப்பு விளக்கியை திரும்பி. fopen திறந்த மேல் பொருட்களை ஒரு கொத்து இல்லை, அதற்கு பதிலாக கோப்பு விளக்கியை ஒரு முழு FILE * சுட்டிக்காட்டி கொடுக்கிறது என்று திரும்பி எந்த உள்ளே இது எங்கள் சிறிய கோப்பு விளக்கி இருக்கிறது. FILE * தான் குறிக்கிறது மிகவும் தரமான, 0 தன்னை ஒரு கோப்பு விளக்கியை தரத்தை குறிக்கிறது, அதேசமயம். கேள்விகள்? [சிரிக்கிறார்] அந்த வழியாக பறந்தது. எல்லாம் சரி. நாம் முடித்துவிட்டீர்கள். [சிரிக்கிறார்] [CS50.TV]