1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [5 سیکشن - مزید آرام دہ اور پرسکون] 2 00:00:02,500 --> 00:00:04,690 [روب Bowden - ہارورڈ یونیورسٹی] 3 00:00:04,690 --> 00:00:07,250 یہ [CS50 ہے. CS50.TV] - 4 00:00:08,990 --> 00:00:14,250 >> کی طرح میں اپنے ای میل میں کہا ہے کہ، وہاں چیزیں جو آپ استعمال کر سکتے ہیں کے ایک بہت ہیں 5 00:00:14,250 --> 00:00:17,060 اصل مسئلہ سیٹ کرنا آلات سے دوسرے. 6 00:00:17,060 --> 00:00:19,910 ہم تجویز ہے کہ آپ اس آلے میں صرف اس وجہ سے تو ہم آپ کو زیادہ آسانی سے مدد کر سکتے ہیں 7 00:00:19,910 --> 00:00:22,070 اور ہم جانتے ہیں کہ کس طرح سب کچھ کرنے کے لئے کام ہو رہا ہے. 8 00:00:22,070 --> 00:00:26,950 لیکن جہاں آپ کام کرنے اگر، کا کہنا ہے کہ کر سکتے ہیں میں سے ایک مثال کے طور پر، آپ کو رسائی حاصل ہے نہیں ہے 9 00:00:26,950 --> 00:00:31,570 ایک آلے یا آپ سائنس سینٹر کے تہھانے میں کام کرنا چاہتے ہیں - 10 00:00:31,570 --> 00:00:33,090 جو اصل میں وہ آلات بھی ہے - 11 00:00:33,090 --> 00:00:35,150 اگر آپ کہیں بھی کام کرنے کے لئے کرنا چاہتے ہیں. 12 00:00:35,150 --> 00:00:42,370 ایک مثال ہے تم نے دیکھا / SSH کے بارے میں سنا ہے؟ 13 00:00:44,380 --> 00:00:47,780 SSH صرف اسے کچھ کرنے سے مربوط طرح بنیادی طور پر ہے. 14 00:00:47,780 --> 00:00:51,340 اصل میں، اب میں آلات میں SSHed رہا ہوں. 15 00:00:51,340 --> 00:00:54,290 میں آلات میں براہ راست کبھی نہیں کام کرتے ہیں. 16 00:00:55,930 --> 00:01:01,060 یہاں آلے ہے، اور اگر آپ یہاں دیکھو، تم اس IP ایڈریس کو دیکھنے کے. 17 00:01:01,060 --> 00:01:03,650 آلات میں ہی میں نے کبھی نہیں کام؛ 18 00:01:03,650 --> 00:01:08,840 میں نے ہمیشہ ایک iTerm2 ونڈو ونڈو / ٹرمینل آ. 19 00:01:08,840 --> 00:01:15,910 آپ کہ IP ایڈریس، jharvard@192.168.129.128 SSH SSH کر سکتے ہیں. 20 00:01:15,910 --> 00:01:20,390 میں یہ تعداد بہت آسانی سے یاد ہے کیونکہ یہ اس طرح ایک اچھا نمونہ ہے. 21 00:01:20,390 --> 00:01:24,920 لیکن اس کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے میرا پاس ورڈ پوچھتے ہیں، اور اب میں آلات میں ہوں گے. 22 00:01:24,920 --> 00:01:33,060 بنیادی طور پر، اس وقت، اگر آپ کو آلات خود کے اندر کھولا ٹرمینل 23 00:01:33,060 --> 00:01:36,350 اس انٹرفیس، تاہم آپ اسے استعمال کریں گے، بالکل ایک ہی ہے 24 00:01:36,350 --> 00:01:40,010 انٹرفیس کے طور پر میں یہاں استعمال کر رہا ہوں لیکن اب تم SSHed رہے ہیں. 25 00:01:42,240 --> 00:01:44,920 تم آلے پر SSH نہیں ہے. 26 00:01:44,920 --> 00:01:52,360 دوسری جگہ کرنے کے لئے آپ کو SSH سکتا ہے کی ایک مثال ہے، میں خوبصورت اس بات کا یقین کر لیں کہ آپ ڈیفالٹ کے ذریعہ ہوں - 27 00:01:52,360 --> 00:01:55,020 اوہ. بڑا. 28 00:01:55,020 --> 00:02:01,130 تم سب FAS سرور پر پہلے سے طے شدہ FAS اکاؤنٹس کی طرف سے ہونا چاہئے. 29 00:02:01,130 --> 00:02:06,840 میرے لئے، میں SSH rbowden@nice.fas.harvard.edu گی. 30 00:02:06,840 --> 00:02:11,610 یہ کہ تم پہلی بار پوچھنا جا رہا ہے، اور آپ ایسا کہتے ہیں. 31 00:02:11,610 --> 00:02:15,840 اپنا پاس ورڈ صرف میرے FAS پاس ورڈ بننے جا رہا ہے. 32 00:02:15,840 --> 00:02:22,650 اور تو اب، میں اچھا سرور پر SSHed رہا ہوں اور میں کچھ بھی میں یہاں کر سکتے ہیں. 33 00:02:22,650 --> 00:02:28,560 کلاس آپ کو 124 کی طرح لے سکتا ہے کے ایک بہت، آپ یہاں چیزیں اپ لوڈ کرنے جا رہے ہیں 34 00:02:28,560 --> 00:02:30,950 اصل میں آپ کا مسئلہ سیٹ جمع کرائیں. 35 00:02:30,950 --> 00:02:34,100 لیکن اس کا کہنا ہے کہ آپ کو آپ کے آلے تک رسائی کی ضرورت نہیں ہے. 36 00:02:34,100 --> 00:02:37,910 تو پھر تم کام کرتے ہیں، یہاں پر کی طرح کہیں گے کر سکتے ہیں - 37 00:02:37,910 --> 00:02:42,160 یہ صرف ہمارے سوالات کے سیکشن ہے. 38 00:02:42,160 --> 00:02:45,070 یہ آپ سے پوچھتا ہوں آلے میں اس کی کیا کریں گے. 39 00:02:45,070 --> 00:02:47,790 اس کے بجائے میں اسے سرور پر صرف کر دونگا. 40 00:02:47,790 --> 00:02:50,560 کہ میں ان زپ کرنے جا رہا ہوں. 41 00:02:50,560 --> 00:02:55,670 مسئلہ ہو گا کہ آپ gedit طرح کچھ کا استعمال کرتے ہوئے کرنے کے لئے استعمال کرتے رہے ہیں کی جا رہی ہے 42 00:02:55,670 --> 00:02:58,160 یا آلے ​​کے جو اندر ہے. 43 00:02:58,160 --> 00:03:01,830 تم جا FAS سرور پر کرنے کی ضرورت نہیں رہے ہیں. 44 00:03:01,830 --> 00:03:04,110 یہ سب صرف اس متن انٹرفیس جا رہے ہیں. 45 00:03:04,110 --> 00:03:09,180 تو آپ یا تو ایک ٹیکسٹ ایڈیٹر ہے کہ وہ کرتے ہیں جاننے کے لئے کوشش کر سکتے ہیں. 46 00:03:09,180 --> 00:03:12,130 وہ نینو ہے. 47 00:03:12,130 --> 00:03:14,990 نینو عام طور پر بہت استعمال کرنا آسان ہے ہے. 48 00:03:14,990 --> 00:03:19,470 آپ اپنے تیر کا استعمال کر سکتے ہیں اور عام طور پر ٹائپ کر سکتے ہیں. 49 00:03:19,470 --> 00:03:21,250 تو یہ مشکل نہیں ہے. 50 00:03:21,250 --> 00:03:24,720 اگر آپ کو واقعی پسند ہیں حاصل کرنے کے لئے کرنا چاہتے ہیں تو آپ Emacs استعمال کر سکتے ہیں، 51 00:03:24,720 --> 00:03:29,850 جو میں نے شاید کیونکہ میں بھی نہیں ہے کہ کس طرح Emacs قریب معلوم نہیں کرنا چاہیے کھول دیا ہے. 52 00:03:29,850 --> 00:03:32,760 کنٹرول X، کنٹرول C؟ جی ہاں. 53 00:03:32,760 --> 00:03:35,310 یا آپ کو طاقت ہے، جس کا ہے جو میں استعمال کرنے کے لئے استعمال کر سکتے ہیں. 54 00:03:35,310 --> 00:03:37,800 اور اس طرح وہ اپنے اختیارات ہیں. 55 00:03:37,800 --> 00:03:43,830 اگر تم ایسا نہیں کرنا چاہتے ہیں، آپ کو، بھی اگر آپ پر نظر کر سکتے ہیں manual.cs50.net - 56 00:03:43,830 --> 00:03:45,410 اوہ. 57 00:03:45,410 --> 00:03:49,920 ایک پی سی پر آپ پٹین SSH استعمال کرتے ہوئے کر سکتے ہیں، 58 00:03:49,920 --> 00:03:51,940 جو آپ کو علیحدہ علیحدہ ڈاؤن لوڈ کرنے کی ضرورت کے لئے جا رہے ہیں. 59 00:03:51,940 --> 00:03:55,460 میک پر، آپ صرف پہلے سے طے شدہ استعمال ٹرمینل کی طرف سے یا آپ کر سکتے ہیں iTerm2 ڈاؤن لوڈ، اتارنا، 60 00:03:55,460 --> 00:03:58,490 جو ایک اچھی پسند ہیں ٹرمینل کی طرح ہے. 61 00:03:58,490 --> 00:04:03,780 اگر آپ manual.cs50.net آپ نوٹ پیڈ میں ایک لنک نظر آئے گا + +، 62 00:04:03,780 --> 00:04:07,120 جس کا ہے جو آپ کو ایک پی سی پر استعمال کر سکتے ہیں. 63 00:04:07,120 --> 00:04:13,340 اس کی اجازت دیتا ہے ہے نوٹ پیڈ سے آپ SFTP + +، جو کہ بنیادی طور پر SSH ہے. 64 00:04:13,340 --> 00:04:17,750 یہ کیا ہے، تم کیا کروگے ہے آپ کی فائلوں کو مقامی طور پر ترمیم کریں، 65 00:04:17,750 --> 00:04:20,670 اور اس کے بعد جب بھی آپ ان کو بچانے کے لئے چاہتے ہیں، یہ nice.fas بچا لے گا، 66 00:04:20,670 --> 00:04:23,670 تم نے انہیں کہاں چلا سکتے ہیں. 67 00:04:23,670 --> 00:04:26,880 اور ایک میک پر برابر TextWrangler جا رہا ہے. 68 00:04:26,880 --> 00:04:28,760 تو اس کی مدد سے آپ ایک ہی بات کرتے ہیں. 69 00:04:28,760 --> 00:04:32,800 اس کی مدد سے آپ کو فائلوں کو مقامی طور پر میں ترمیم کریں اور nice.fas کرنے کے لئے انہیں بچانے کے، 70 00:04:32,800 --> 00:04:35,730 تم نے انہیں کہاں چلا سکتے ہیں. 71 00:04:35,730 --> 00:04:40,400 لہذا اگر تم نے کبھی ایک آلے کے بغیر پھنس گئے ہیں، آپ کے پاس یہ اختیارات ہیں 72 00:04:40,400 --> 00:04:44,230 آپ کا مسئلہ سیٹ اب بھی کرتے ہیں. 73 00:04:44,230 --> 00:04:48,250 ایک مسئلہ کہ تم جا CS50 لائبریری نہیں کر رہے ہیں کی جا رہی ہے 74 00:04:48,250 --> 00:04:51,580 کی وجہ سے پہلے سے طے شدہ کی طرف سے nice.fas نہیں ہے. 75 00:04:51,580 --> 00:04:55,970 آپ CS50 لائبریری یا تو ڈاؤن لوڈ، اتارنا کر سکتے ہیں - 76 00:04:55,970 --> 00:04:58,470 مجھے نہیں لگتا ہے کہ میں اس وقت اس کی ضرورت ہے. 77 00:04:58,470 --> 00:05:03,270 آپ CS50 لائبریری یا تو اور یہ nice.fas کو کاپی ڈاؤن لوڈ، اتارنا کر سکتے ہیں، 78 00:05:03,270 --> 00:05:07,450 یا مجھے لگتا ہے کہ اس وقت ہم اس کا استعمال نہیں کرتے اب ویسے بھی. 79 00:05:07,450 --> 00:05:12,720 یا اگر ہم ایسا کرتے ہیں، آپ کو وقت کے لئے کیا جا رہا ہے یہ کر سکتے ہیں کے ساتھ کی جگہ 80 00:05:12,720 --> 00:05:18,480 ویسے بھی CS50 لائبریری میں کام کے نفاذ. 81 00:05:18,480 --> 00:05:21,370 تو یہ ہے کہ پابندیوں کے اتنا نہیں ہونا چاہئے. 82 00:05:21,370 --> 00:05:23,710 اور یہ ہے. 83 00:05:26,460 --> 00:05:29,820 >> میں آلات پر واپس اب جاؤ گے، ہم آلے میں سب کچھ کروں گا. 84 00:05:29,820 --> 00:05:37,510 کی تلاش میں سوالات کے ہمارے حصے میں، شروع میں، جیسا کہ میں نے کہا کہ اپنے ای میل میں، 85 00:05:37,510 --> 00:05:43,620 ہم مختصر ایک آپ کو دیکھنا چاہئے تھا کے بارے میں بات کرنے کے لئے ہے. 86 00:05:43,620 --> 00:05:51,980 ہم منتقل کیا جا رہا اور عمومی پائپ اور ان تین سوال ہیں. 87 00:05:51,980 --> 00:05:56,070 >> جو ندی کی طرح کام کرتا ہے ڈیفالٹ کے ذریعہ printf لکھ سکتا ہوں؟ 88 00:05:56,070 --> 00:05:59,130 تو ندی. ندی کیا ہے؟ 89 00:06:06,520 --> 00:06:15,100 بنیادی طور پر ایک ندی کی طرح یہ صرف کچھ ہے - 90 00:06:15,100 --> 00:06:21,450 1s اور 0s کے ذریعے یہ بھی نہیں ہے. 91 00:06:21,450 --> 00:06:24,920 ندی یہ یہاں کے بارے میں پوچھ رہا ہے معیاری باہر ہے. 92 00:06:24,920 --> 00:06:27,250 اور معیاری باہر ایک ندی ہے آپ اسے جب لکھنا 93 00:06:27,250 --> 00:06:30,940 اس کی سکرین پر ظاہر ہوتا ہے. 94 00:06:30,940 --> 00:06:36,860 معیاری، ندی کی طرف سے، اس کا مطلب ہے کہ آپ نے ابھی 1s اور اس 0s لکھنے، 95 00:06:36,860 --> 00:06:40,220 اور معیاری باہر کے دوسرے سرے صرف اس سلسلہ سے پڑھتا ہے. 96 00:06:40,220 --> 00:06:43,540 یہ صرف 1s اور 0s کی ایک تار ہے. 97 00:06:43,540 --> 00:06:45,570 آپ اسٹریمز میں لکھنے یا آپ اسٹریمز میں سے پڑھ سکتے ہیں کر سکتے ہیں 98 00:06:45,570 --> 00:06:47,950 اصل میں جو ندی ہے پر منحصر ہے. 99 00:06:47,950 --> 00:06:52,800 دیگر دو ڈیفالٹ اسٹریمز اور معیاری گمراہی میں معیاری ہیں. 100 00:06:52,800 --> 00:06:57,540 میں معیاری ہے جب بھی آپ GetString کرتے ہیں، یہ آپ کے لئے ان پٹ کے سامان میں انتظار کر رہی ہے. 101 00:06:57,540 --> 00:07:01,570 تو یہ آپ کے لئے انتظار کر رہا ہے، یہ اصل میں میں معیار پر انتظار کر رہی ہے، 102 00:07:01,570 --> 00:07:04,880 جو واقعی ہے جو تمہیں حاصل ہے جب آپ کو کی بورڈ میں ٹائپ. 103 00:07:04,880 --> 00:07:07,530 تم اندر معیار میں ٹائپ کر رہے ہیں 104 00:07:07,530 --> 00:07:10,050 سٹینڈرڈ غلطی بنیادی طور پر معیار باہر کے برابر ہے، 105 00:07:10,050 --> 00:07:13,280 لیکن یہ اس میں ماہر ہے جب آپ کو معیاری کی خرابی کی پرنٹ، 106 00:07:13,280 --> 00:07:16,770 آپ کو صرف اس خرابی کے پیغامات کی پرنٹ کرنا ہے 107 00:07:16,770 --> 00:07:20,200 لہذا آپ کو سکرین طباعت کی باقاعدہ پیغامات کے درمیان فرق کر سکتے ہیں 108 00:07:20,200 --> 00:07:24,560 غلطی چاہے وہ معیار باہر یا معیاری غلطی گئے تھے کے لحاظ سے پیغامات کے مقابلے میں. 109 00:07:24,560 --> 00:07:28,660 بھی فائلیں. 110 00:07:28,660 --> 00:07:32,440 سٹینڈرڈ باہر، میں معیار اور معیاری غلطی صرف خصوصی اسٹریمز ہیں، 111 00:07:32,440 --> 00:07:36,810 لیکن واقعی میں کسی بھی فائل کے جب تم نے ایک فائل کو کھولنے، بائٹس کی ایک ندی بن جاتا ہے 112 00:07:36,810 --> 00:07:40,740 آپ کو اس سلسلے سے ہے جہاں صرف پڑھ سکتے ہیں. 113 00:07:40,740 --> 00:07:47,770 تم بائٹس کی ایک ندی کے طور پر ایک فائل کے سب سے زیادہ حصہ کے لئے، صرف سوچ سکتے ہیں. 114 00:07:47,770 --> 00:07:51,190 تو کیا اسٹریمز میں وہ پہلے سے طے شدہ کی طرف سے کرتے ہیں لکھنے کے لئے ہے؟ سٹینڈرڈ باہر. 115 00:07:51,190 --> 00:07:56,980 >> > اور >> کے درمیان کیا فرق ہے؟ 116 00:07:58,140 --> 00:08:03,710 کیا کسی ویڈیو سے پہلے دیکھتے ہو؟ ٹھیک ہے. 117 00:08:03,710 --> 00:08:10,960 > کس طرح آپ کو فائلوں میں ری کی جا رہی ہے، 118 00:08:10,960 --> 00:08:15,240 اور >> فائلوں میں بھی پیداوار پر ری ڈائریکٹ کی جا رہی ہے، 119 00:08:15,240 --> 00:08:17,820 لیکن اس کی بجائے فائل میں شامل ہو رہا ہے. 120 00:08:17,820 --> 00:08:23,430 مثال کے طور پر، دو کا کہنا ہے کہ میں dict یہاں ہو، 121 00:08:23,430 --> 00:08:27,020 اور dict کے اندر صرف چیزیں بلی، بلی، کتا، مچھلی، کتے، ہے. 122 00:08:27,020 --> 00:08:31,530 ایک حکم ہے کہ آپ کمانڈ لائن پر بلی ہے، 123 00:08:31,530 --> 00:08:34,539 جس میں صرف پرنٹ ایک فائل میں کیا ہے جا رہا ہے. 124 00:08:34,539 --> 00:08:40,679 تو جب میں نے کا کہنا ہے کہ بلی dict، بلی، بلی، کتا، مچھلی، کتے، کو پرنٹ کرنے کے لئے جا رہا ہے. اس کا تمام بلی ہے. 125 00:08:40,679 --> 00:08:46,280 اس کا مطلب یہ ہے کہ یہ بلی، بلی، کتا، مچھلی، کتے، باہر معیاری طباعت کی. 126 00:08:46,280 --> 00:08:53,240 اگر میں بجائے ایک فائل پر ری ڈائریکٹ کرنا چاہتے ہیں، میں استعمال کرنے کے لئے> جو بھی فائل ہے ری کر سکتے ہیں. 127 00:08:53,240 --> 00:08:56,460 میں فائل فائل کو فون کریں گے. 128 00:08:56,460 --> 00:09:00,320 تو اب اگر میں LS میں دیکھ، میں نامی ایک نئی فائل فائل ہے گے. 129 00:09:00,320 --> 00:09:05,700 اور اگر میں اسے کھولو، یہ بالکل وہی جو بلی کمانڈ لائن پر ڈال جا رہا ہے. 130 00:09:05,700 --> 00:09:11,040 تو اب اگر میں اس کے پھر سے کرتے ہیں، تو اس فائل میں پیداوار ری جا رہا ہے، 131 00:09:11,040 --> 00:09:13,930 اور میں ایک ہی عین مطابق بات کرنے جا رہا ہوں. 132 00:09:13,930 --> 00:09:17,910 تو تکنیکی طور پر، یہ مکمل طور پر overrode کیا ہم نے. 133 00:09:17,910 --> 00:09:22,970 اور ہم دیکھتے ہیں اگر میں dict تبدیل کر دونگا، میں نے کتے لیا. 134 00:09:22,970 --> 00:09:29,980 اب اگر فائل میں بلی ہم پھر dict، ہم کتے ہٹا کے ساتھ نیا ورژن کے لئے جا رہے ہیں. 135 00:09:29,980 --> 00:09:32,400 تو یہ پوری طرح اس کی جگہ لے لیتا ہے. 136 00:09:32,400 --> 00:09:36,640 اس کے بجائے اگر ہم >> استعمال کرتے ہیں، یہ فائل شامل ہو رہا ہے. 137 00:09:36,640 --> 00:09:40,860 اب، فائل کھولنے، ہم دیکھتے ہیں ہم صرف ایک ہی دو بار طباعت چیز ہے 138 00:09:40,860 --> 00:09:44,920 کیونکہ یہ وہاں ایک بار گیا تھا، اس کے بعد ہم اصل سے منسلک ہے. 139 00:09:44,920 --> 00:09:48,130 تو کہ جو> >> اور کرتے ہیں. 140 00:09:48,130 --> 00:09:50,580 اس کے بارے میں نہیں پوچھا - کیا اگلے ایک سے پوچھو. 141 00:09:50,580 --> 00:09:59,050 >> کہ ہم ایک دوسرے <ہے، جو اگر> معیاری باہر ری ڈائریکٹس ہے، 142 00:09:59,050 --> 00:10:01,970 <معیار کو ری ڈائریکٹ کرنے کے لئے اندر جا رہا ہے 143 00:10:01,970 --> 00:10:12,050 چلو دیکھتے ہیں اگر ہم ایک مثال ہے. 144 00:10:14,750 --> 00:10:16,930 میں ایک حقیقی فوری لکھ سکتے ہیں. 145 00:10:17,870 --> 00:10:25,700 چلو کسی بھی فائل، hello.c لے. 146 00:10:56,060 --> 00:10:59,070 نسبتا براہ راست فائل. 147 00:10:59,070 --> 00:11:03,570 میں صرف ایک تار ہو رہا ہے اور اس کے بعد "ہیلو" جو سٹرنگ میں صرف میں داخل تھا چھپائی. 148 00:11:03,570 --> 00:11:07,990 تو خوش اور پھر / ہیلو. 149 00:11:07,990 --> 00:11:10,720 اب یہ آپ کے وزٹرز کا ریکارڈ رکھا نے فورا ہی کچھ داخل کرنے کی ہے، 150 00:11:10,720 --> 00:11:15,070 جس کا مطلب ہے کہ یہ چیزوں پر انتظار کر رہے اندر معیار میں داخل 151 00:11:15,070 --> 00:11:20,450 درج کریں جو کچھ بھی میں معیار میں اندر ہم صرف یہ کہنا ہیلو، روب جا رہے ہیں! 152 00:11:20,450 --> 00:11:23,310 اس کے بعد یہ خوش باہر معیار کے مطابق چھپائی، روب! 153 00:11:23,310 --> 00:11:28,860 اگر میں / ہیلو. اور اس کے بعد ری 154 00:11:30,740 --> 00:11:34,310 اب آپ کے لئے صرف ایک فائل سے ری ڈائریکٹ کر سکتے ہیں. 155 00:11:34,310 --> 00:11:41,720 تو اگر میں کچھ فائل، TXT میں ڈال دیا، اور میں روب ڈال، 156 00:11:41,720 --> 00:11:52,300 اگر میں نے ہیلو چلانے اور پھر میں فائل TXT ری / ہیلو، خوش کہنا، روب جا رہا ہے! فوری طور پر. 157 00:11:52,300 --> 00:11:57,160 جب یہ پہلی GetString ہو جاتا ہے اور اس میں معیار پر انتظار کر رہا ہے، 158 00:11:57,160 --> 00:12:01,730 میں معیار نہیں رہ گیا ہے میں داخل کرنے کے لئے اعداد و شمار کے لئے کی بورڈ پر انتظار کر رہا ہے. 159 00:12:01,730 --> 00:12:05,980 اس کے بجائے، ہم معیاری فائل TXT سے پڑھنے کے لئے میں ری ڈائریکٹ کیا ہے. 160 00:12:05,980 --> 00:12:10,290 اور تو اس فائل TXT، جس میں صرف لائن روب سے پڑھنے کے لئے جا رہا ہے، 161 00:12:10,290 --> 00:12:13,380 اور پھر یہ خوش روب، پرنٹ کرنے کے لئے جا رہا ہے! 162 00:12:13,380 --> 00:12:18,180 اور اگر میں چاہتا تھا، میں بھی / ہیلو TXT <کر سکتے ہیں. 163 00:12:18,180 --> 00:12:21,500 اور اس کے بعد کہ معیار، پرنٹنگ، جو خوش ہے روب، 164 00:12:21,500 --> 00:12:24,700 میں ہے کہ اس کے اپنے فائل میں ری ڈائریکٹ کر سکتے ہیں. 165 00:12:24,700 --> 00:12:29,790 میں نے فائل صرف ہیلو فون کرتا ہوں - نہیں، میں نہیں، کیونکہ اس کی کارکردگی ہے - txt2. 166 00:12:29,790 --> 00:12:40,150 اب، txt2 / ہیلو. 00:12:43,520 >> سوال؟ 168 00:12:45,900 --> 00:12:49,090 >> ٹھیک ہے. تو پھر ہم یہاں پائپ لائن ہے. 169 00:12:49,090 --> 00:12:53,510 پائپ نئ سمت کے آخری یونٹ ہے. 170 00:12:53,510 --> 00:12:58,750 >> اوہ. مجھے لگتا ہے کہ نئ سمت کا ایک اور یونٹ ہے کی بجائے اگر> آپ 2 کیا> 171 00:12:58,750 --> 00:13:01,070 جو معیاری غلطی منتقل کیا جا رہا ہے. 172 00:13:01,070 --> 00:13:06,280 تو اگر کچھ معیاری کی خرابی کی گئی تھی، اس کے txt2 میں نہیں ملے گا دیا. 173 00:13:06,280 --> 00:13:12,480 لیکن اگر میں 2> نوٹس، تو یہ اب بھی خوش پرنٹنگ، روب! کمانڈ لائن 174 00:13:12,480 --> 00:13:18,600 کیونکہ میں صرف معیاری غلطی منتقل کیا جا رہا ہے کر رہا ہوں، میں معیار منتقل کیا جا رہا ہے نہیں کر رہا ہوں باہر. 175 00:13:18,600 --> 00:13:22,210 معیاری نقص اور معیار باہر مختلف ہیں. 176 00:13:24,210 --> 00:13:27,080 اگر آپ واقعی معیاری غلطی پر لکھنا چاہتے تھے، 177 00:13:27,080 --> 00:13:35,080 تو میں اسے تبدیل stderr پر fprintf سکتا ہے. 178 00:13:35,080 --> 00:13:37,850 تو printf، بطور ڈیفالٹ کی طرف سے، معیار باہر پرنٹ. 179 00:13:37,850 --> 00:13:41,720 اگر میں معیار کی خرابی کی دستی طور پر پرنٹ کرنا چاہتے ہیں، تو میں fprintf استعمال کرنے کے لئے ہے 180 00:13:41,720 --> 00:13:45,010 اور وضاحت جو میں پرنٹ کرنے کے لئے چاہتے ہیں. 181 00:13:45,010 --> 00:13:49,720 اگر بجائے میں fprintf stdout کیا، تو یہ بنیادی طور پر printf کے برابر ہے. 182 00:13:49,720 --> 00:13:55,530 لیکن fprintf معیاری نقص. 183 00:13:57,790 --> 00:14:03,650 تو اب، اگر میں txt2 میں اس ری ہیلو، روب! اب بھی کمانڈ لائن میں پرنٹ ہو رہی ہے 184 00:14:03,650 --> 00:14:08,270 کیونکہ یہ ہو رہا ہے معیاری کی خرابی کی طباعت اور میں صرف معیار باہر منتقل کیا جا رہا ہے کر رہا ہوں. 185 00:14:08,270 --> 00:14:16,420 اگر اب میں معیاری غلطی ری، اب یہ نہیں ملا تھا طباعت اور txt2 خوش، روب جا رہا ہے! 186 00:14:16,420 --> 00:14:21,910 تو اب، آپ کو معیاری کی خرابی کی اصل غلطیوں کو پرنٹ کر سکتے ہیں 187 00:14:21,910 --> 00:14:24,720 اور معیار باہر آپ کے باقاعدہ پیغامات پرنٹ. 188 00:14:24,720 --> 00:14:31,420 اور تو جب آپ کو آپ کے پروگرام چلاتے ہیں، آپ اسے چلانے / 2 کے ساتھ کر سکتے ہیں خوش. اس قسم> 189 00:14:31,420 --> 00:14:33,800 تاکہ آپ کے پروگرام عام طور پر چلانے کے لئے کی جا رہی ہے، 190 00:14:33,800 --> 00:14:38,400 لیکن کسی خرابی کے پیغامات میں کہا گیا ہے کہ آپ کو آپ کے حاصل آپ کی غلطی لاگ ان میں بعد میں چیک کر سکتے ہیں، 191 00:14:38,400 --> 00:14:44,500 غلطیاں تو پھر بعد میں دیکھو اور اپنی غلطیوں فائل میں کسی بھی غلطی ہے کہ ہوا ہو گا. 192 00:14:45,200 --> 00:14:47,540 >> سوال؟ 193 00:14:47,540 --> 00:14:58,070 >> گزشتہ ایک پائپ ہے، جس سے آپ کے معیار ایک حکم سے باہر لے جا رہا کرنے کے طور پر سوچ سکتے ہیں ہے 194 00:14:58,070 --> 00:15:01,210 اور اسے اگلے کمانڈ کے معیار بنا رہے ہیں. 195 00:15:01,210 --> 00:15:05,570 ایک مثال کے طور پر یہاں گونج ایک کمانڈ لائن بات ہے 196 00:15:05,570 --> 00:15:11,840 کہ صرف بازگشت جو کچھ بھی میں نے اس کی دلیل کے طور پر ڈال کی جا رہی ہے. میں کی قیمت درج نہیں ڈال کرے گا. 197 00:15:11,840 --> 00:15:16,150 ایکو BLAH، BLAH BLAH BLAH، BLAH، BLAH پرنٹ کرنے کے لئے کی جا رہی ہے. 198 00:15:16,150 --> 00:15:20,600 سے پہلے، جب میں نے کہا کہ میں ایک TXT فائل میں روب ڈال تھا 199 00:15:20,600 --> 00:15:28,830 کیونکہ میں TXT فائلوں کو صرف بجائے ری ڈائریکٹ کر سکتے ہیں، اگر مجھے / روب بازگشت 200 00:15:28,830 --> 00:15:35,520 اور پھر پائپ اس میں / ہیلو، جو بات کے اسی قسم بھی کیا کریں گے. 201 00:15:35,520 --> 00:15:39,160 یہ اس حکم کی پیداوار، گونج روب لے جا رہا ہے، 202 00:15:39,160 --> 00:15:43,610 اور اس کے لئے ان پٹ کے طور پر استعمال کرتے ہوئے / ہیلو. 203 00:15:44,790 --> 00:15:49,560 آپ کو اس کے بارے میں سوچ کے طور پر سب سے پہلے ایک فائل میں گونج روب ری کر سکتے ہیں 204 00:15:49,560 --> 00:15:54,160 اور پھر فائل / ہیلو. کہ میں ان پٹ ہے کہ صرف outputted کیا گیا تھا. 205 00:15:54,160 --> 00:15:57,850 لیکن اس تصویر کے عارضی فائل لیتا ہے. 206 00:16:01,890 --> 00:16:04,460 >> اس پر سوال؟ 207 00:16:04,460 --> 00:16:07,150 >> دوسرا سوال یہ شامل کرنے کے لئے کی جا رہی ہے. 208 00:16:07,150 --> 00:16:15,310 کیا پائپ لائن کے آپ نامی names.txt فائل میں منفرد نام کی تعداد کو تلاش کرنے کے لئے استعمال کر سکتے ہیں؟ 209 00:16:15,310 --> 00:16:24,160 حکم ہم یہاں استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں میں منفرد، تو uniq، اور پھر ورلڈ کپ ہے. 210 00:16:24,160 --> 00:16:28,840 تم وہی آدمی uniq اصل میں ہے کہ وہ کیا کرتا ہے میں دیکھ سکتے ہیں، 211 00:16:28,840 --> 00:16:34,840 اور یہ صرف ان پٹ سے ملحقہ ملاپ کے لائنز فلٹر جا رہا ہے. 212 00:16:34,840 --> 00:16:40,690 اور انسان ورلڈ کپ newline، لفظ، اور ہر ایک فائل کے لئے بائٹ شمار کو پرنٹ کرنے کے لئے کی جا رہی ہے. 213 00:16:40,690 --> 00:16:43,760 اور آخری ایک طرح کی ہم استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں ہے، 214 00:16:43,760 --> 00:16:47,410 جو TXT فائل کی لائنز کی چھانٹی کرنے جا رہا ہے. 215 00:16:47,410 --> 00:16:58,080 اگر میں کچھ TXT فائل، names.txt، اور یہ روب، ٹامی، یوسف، ٹامی، یوسف، RJ، روب ہے، 216 00:16:58,080 --> 00:17:03,910 میں یہاں کرنا چاہتے ہیں ہے کہ اس فائل میں منفرد نام کی تعداد کو تلاش کریں. 217 00:17:03,910 --> 00:17:08,750 تو جواب کیا ہونا چاہئے؟ >> [طالب علم] 4. >> جی ہاں. 218 00:17:08,750 --> 00:17:13,780 یہ روب، ٹامی، یوسف کے بعد 4 ہونا چاہئے، RJ اس فائل میں صرف منفرد نام ہے. 219 00:17:13,780 --> 00:17:20,180 اس سلسلے میں پہلے قدم کے طور پر، اگر میں صرف names.txt پر لفظ شمار کرتے ہیں 220 00:17:20,180 --> 00:17:24,290 اس نے مجھے سب کچھ بتا رہا ہے. 221 00:17:24,290 --> 00:17:32,560 یہ دراصل پرنٹنگ ہے - چلو دیکھتے ہیں، انسان ورلڈ کپ - newlines، الفاظ، اور بائٹ شمار. 222 00:17:32,560 --> 00:17:38,270 اگر میں لائنوں کے بارے میں صرف دیکھ بھال، تو میں names.txt ورلڈ کپ L کر سکتے ہیں. 223 00:17:41,730 --> 00:17:44,300 تو کہ مرحلہ نمبر 1 ہے. 224 00:17:44,300 --> 00:17:50,510 لیکن میں ورلڈ کپ L-names.txt نہیں کرنا چاہتے کیونکہ names.txt صرف تمام ناموں پر مشتمل ہے، 225 00:17:50,510 --> 00:17:54,170 اور میں کسی بھی غیر منفرد ہیں فلٹر کرنا چاہتے ہیں. 226 00:17:54,170 --> 00:18:01,200 تو اگر میں uniq names.txt کرتے ہیں کہ مجھے بہت نہیں ہے وہ دو جو میں چاہتا ہوں 227 00:18:01,200 --> 00:18:03,760 کیونکہ نقل ناموں اب بھی وہاں ہیں. 228 00:18:03,760 --> 00:18:07,690 ایسا کیوں ہے؟ uniq کر کیوں جو میں چاہتا ہوں نہیں ہے؟ 229 00:18:07,690 --> 00:18:10,500 [طالب علم] نقول نہیں ہیں [اشراوی] >> جی ہاں. 230 00:18:10,500 --> 00:18:16,370 uniq کے لئے آدمی کا صفحہ یاد فلٹر ملحقہ ملاپ لائنوں کا کہنا ہے کہ. 231 00:18:16,370 --> 00:18:19,680 ان سے ملحق نہیں ہیں، تو اس نے ان کو فلٹر نہیں کرے گا. 232 00:18:19,680 --> 00:18:31,100 اگر میں نے ان سے پہلے ترتیب، ترتیب دیں names.txt تمام نقل لائنوں کو ایک ساتھ ڈال کی جا رہی ہے. 233 00:18:31,100 --> 00:18:34,450 تو اب طرح names.txt ہے. 234 00:18:34,450 --> 00:18:40,550 uniq | میں uniq ہے، جو ان پٹ کے طور پر استعمال کرنا چاہتے ہیں کے لئے جا رہا ہوں. 235 00:18:40,550 --> 00:18:43,390 وہ مجھے یوسف، RJ، روب، ٹومی دیتا ہے، 236 00:18:43,390 --> 00:18:49,260 میں ہے کہ ورلڈ کپ L-ان پٹ کے طور پر استعمال کرنا چاہتے ہیں، 237 00:18:49,260 --> 00:18:52,740 جو آپ کے وزٹرز کا ریکارڈ رکھا 4 دینے جا رہا ہے. 238 00:18:52,740 --> 00:18:56,930 کی طرح یہ یہاں کا کہنا ہے کہ، آپ کو کیا پائپ لائن کا استعمال کر سکتا ہے؟ 239 00:18:56,930 --> 00:19:01,390 آپ کو حکم دیتا ہے کا ایک سلسلہ کا استعمال کرتے ہوئے کی طرح بہت سی چیزیں کر سکتے ہیں 240 00:19:01,390 --> 00:19:05,130 آپ کو ایک ہی حکم سے جہاں اگلے حکم پر ان پٹ کے طور پر پیداوار کا استعمال کرتے ہیں. 241 00:19:05,130 --> 00:19:08,780 آپ کو بہت سی چیزوں کو ہوشیار چیزوں میں سے ایک بہت کچھ کر سکتے ہیں. 242 00:19:08,780 --> 00:19:11,440 >> سوال؟ 243 00:19:12,910 --> 00:19:14,600 ٹھیک ہے. 244 00:19:14,600 --> 00:19:17,880 پائپ اور نئ سمت کے لئے ہے. 245 00:19:18,370 --> 00:19:24,090 >> اب ہم اصل سامان، کوڈنگ سامان پر جانا. 246 00:19:24,090 --> 00:19:29,100 اس PDF کے اندر، آپ کو اس حکم کو نظر آئے گا، 247 00:19:29,100 --> 00:19:32,950 اور آپ کو آپ کے آلے میں اس حکم پر چلانا چاہتے ہیں کریں گے. 248 00:19:36,240 --> 00:19:42,250 wget صرف انٹرنیٹ سے کچھ حاصل کرنے کے لئے حکم ہے، بنیادی طور پر، 249 00:19:42,250 --> 00:19:45,180 تو wget اور یہ یو آر ایل ہے. 250 00:19:45,180 --> 00:19:49,110 اگر آپ کو آپ کے براؤزر میں اس یو آر ایل پر گئے تھے، وہ اس فائل کو ڈاؤن لوڈ، اتارنا گے. 251 00:19:49,110 --> 00:19:52,510 میں صرف اس پر کلک کیا ہے، تو یہ میرے لئے فائل ڈاؤن لوڈ. 252 00:19:52,510 --> 00:19:55,650 لیکن ٹرمینل کے اندر اس بات کا wget لکھنے 253 00:19:55,650 --> 00:19:58,620 ہے صرف یہ آپ کے ٹرمینل میں داخل کرنے کے لئے ڈاؤن لوڈ، اتارنا جا رہے ہیں. 254 00:19:58,620 --> 00:20:02,750 میں section5.zip ہے، اور آپ section5.zip ان زپ کرنا چاہیں گے، 255 00:20:02,750 --> 00:20:06,520 جو آپ کو ایک فولڈر میں کہا جاتا section5 دینے جا رہا ہے، 256 00:20:06,520 --> 00:20:11,550 جو فائلوں آج ہم اس کے اندر استعمال کر جا رہے ہیں سب ہو رہا ہے. 257 00:20:33,380 --> 00:20:37,710 جیسا کہ ان پروگراموں کی فائل کے نام تجویز ہے، وہ تھوڑا سا چھوٹی گاڑی ہو، 258 00:20:37,710 --> 00:20:40,990 تو آپ کا مشن باہر کیوں gdb کا استعمال کرتے ہوئے اعداد و شمار ہے. 259 00:20:40,990 --> 00:20:44,560 کیا سب انہیں ڈاؤن لوڈ / جانتے کہ کس طرح انہیں ڈاؤن لوڈ 260 00:20:44,560 --> 00:20:47,480 ان آلات میں؟ ٹھیک ہے. 261 00:20:47,480 --> 00:20:56,400 >> ./buggy1 چل رہا ہے، یہ انقطاع غلطی بنیادی پھینک دیا کہیں گے، 262 00:20:56,400 --> 00:21:00,500 جو کسی بھی وقت آپ segfault ایک سکتے ہو، یہ ایک بری بات ہے. 263 00:21:00,500 --> 00:21:03,810 کن حالات کے تحت آپ segfault ایک حاصل کرتے ہیں؟ 264 00:21:03,810 --> 00:21:08,210 [طالب علم] شہوت انگیز null پوائنٹر محولہ لقب ضبطی. >> جی ہاں. تو یہ ایک مثال ہے. 265 00:21:08,210 --> 00:21:11,580 محولہ لقب ضبطی شہوت انگیز null پوائنٹر آپ segfault ایک حاصل کرنے کے لئے جا رہے ہیں. 266 00:21:11,580 --> 00:21:16,720 کیا مطلب ہے segfault ہے آپ میموری کو چھو رہے ہیں، آپ کو چھو نہیں کیا جانا چاہئے. 267 00:21:16,720 --> 00:21:21,350 تو محولہ لقب ضبطی شہوت انگیز null پوائنٹر 0 ایڈریس چھونے ہے، 268 00:21:21,350 --> 00:21:28,060 اور بنیادی طور پر، تمام کمپیوٹر آج کل کا کہنا ہے کہ ایڈریس 0 میموری آپ کو چھو نہیں کیا جانا چاہئے ہے. 269 00:21:28,060 --> 00:21:31,920 تو یہی وجہ ہے کہ اتارنا null segfault میں پوائنٹر نتائج محولہ لقب ضبطی. 270 00:21:31,920 --> 00:21:37,210 جب آپ ایک پوائنٹر نہیں ابتدا ہو، تو یہ ردی کی ٹوکری کی قدر ہے، 271 00:21:37,210 --> 00:21:41,520 اور اسی طرح جب آپ dereference کی کوشش کرتے ہیں، آپ کو تمام امکانات میں میموری کو چھو رہے ہیں 272 00:21:41,520 --> 00:21:43,540 جو کہیں کے وسط میں ہے. 273 00:21:43,540 --> 00:21:45,650 اگر آپ کو خوش اور ردی کی ٹوکری کی قیمت حاصل کرنے کے لئے ہو 274 00:21:45,650 --> 00:21:48,440 اسٹیک یا کچھ اور کہیں اشارہ ہوا 275 00:21:48,440 --> 00:21:50,820 تو جب آپ dereference کہ پوائنٹر جو تم نہیں initialized ہے، 276 00:21:50,820 --> 00:21:52,730 کچھ غلط نہیں ہو گا. 277 00:21:52,730 --> 00:21:55,480 لیکن اگر اس کی طرف اشارہ ہے، اسٹیک اور ڈھیر کے درمیان کہیں کا کہنا ہے کہ، 278 00:21:55,480 --> 00:21:59,850 یا یہ صرف کہیں ہے جو آپ کے پروگرام کی طرف سے کیا گیا ہے ابھی تک نہیں استعمال کیا جاتا ہے کی طرف اشارہ کرتے ہوئے، 279 00:21:59,850 --> 00:22:02,240 تو آپ میموری کو چھو رہے ہیں آپ کو چھو نہیں کیا جانا چاہئے اور تم segfault. 280 00:22:02,240 --> 00:22:06,370 جب آپ کو ایک پنراورتی تقریب لکھیں اور اس میں بھی کئی بار recurses 281 00:22:06,370 --> 00:22:08,720 اور آپ کے اسٹیک چیزوں میں بہت بڑے اور اسٹیک ٹکرا اگنے 282 00:22:08,720 --> 00:22:12,270 جو اس کے ساتھ نہیں ہونا چاہئے colliding، آپ کو میموری کو چھو رہے ہیں، آپ کو چھو نہیں کیا جانا چاہئے، 283 00:22:12,270 --> 00:22:14,810 تم اتنے segfault. 284 00:22:14,810 --> 00:22:17,010 اسی segfault ایک ہے. 285 00:22:17,010 --> 00:22:21,810 >> یہ بھی اسی وجہ سے ہے کہ اگر آپ کی طرح ایک تار ہے - 286 00:22:21,810 --> 00:22:23,930 پچھلے پروگرام واپس جانے دو. 287 00:22:23,930 --> 00:22:28,530 میں hello.c ہوں صرف کچھ کرنے جا رہا ہے. 288 00:22:28,530 --> 00:22:33,770 چار * = "دنیا خوش!"؛ 289 00:22:33,770 --> 00:22:42,310 ، اگر میں * کی = یا کچھ کی [0] = 'X' کا استعمال کرتے ہیں 290 00:22:42,310 --> 00:22:47,290 لہذا ہیلو، / ہیلو، ہے. segfault کیوں؟ 291 00:22:48,410 --> 00:22:51,250 یہ کیوں segfault؟ 292 00:22:55,660 --> 00:22:57,890 آپ کو کیا ہو توقع کریں گے؟ 293 00:22:57,890 --> 00:23:06,640 اگر میں printf کیا ("٪ s کو \ N"، S)، کیا آپ کو پرنٹ توقع کریں گے؟ 294 00:23:06,640 --> 00:23:09,930 [طالب علم] X ہیلو. >> جی ہاں. 295 00:23:09,930 --> 00:23:15,140 مسئلہ یہ ہے کہ جب آپ اس طرح ایک تار کا اعلان، 296 00:23:15,140 --> 00:23:18,190 پوائنٹر اسٹیک پر جانے کے لئے ہو رہا ہے ہے، 297 00:23:18,190 --> 00:23:25,880 اور جو کا اشارہ کر رہا ہے اس سٹرنگ ہے جو میموری صرف پڑھنے میں موجود ہے. 298 00:23:25,880 --> 00:23:30,560 تو، تم نام، میموری، صرف پڑھنے کے خیال ہو جانا چاہئے 299 00:23:30,560 --> 00:23:33,010 کہ، اگر میموری صرف پڑھنے میں کیا ہے، آپ اس بات کو تبدیل کرنے کی کوشش کریں 300 00:23:33,010 --> 00:23:36,670 تم سے کچھ آپ کو میموری کے ساتھ نہیں کرنا چاہئے کر رہے ہیں اور تم segfault. 301 00:23:36,670 --> 00:23:45,360 یہ اصل میں چار کے * اور چار کے [] کے درمیان ایک بڑا فرق ہے. 302 00:23:45,360 --> 00:23:48,790 لہذا کے چار، []، اب اس جملے کو اسٹیک پر ڈال دیا جا رہا ہے 303 00:23:48,790 --> 00:23:53,960 اور اسٹیک صرف پڑھنے نہیں ہے، جس کا مطلب یہ ہے کہ یہ بالکل ٹھیک کام کرنا چاہئے. 304 00:23:55,500 --> 00:23:57,370 اور اس سے فرق پڑتا ہے. 305 00:23:57,370 --> 00:24:06,250 یاد رکھیں کہ میں جب چار کرتے ہیں * کے = "ہیلو دنیا!"، S خود اسٹیک پر ہے 306 00:24:06,250 --> 00:24:10,390 لیکن کہیں اور کے پوائنٹس، اور یہ کہ کسی اور صرف پڑھنے ہوتا ہے. 307 00:24:10,390 --> 00:24:15,640 لیکن چار کے] [صرف اسٹیک کچھ ہے. 308 00:24:17,560 --> 00:24:21,760 تو وہ segfault ایک ہو رہا کی ایک اور مثال ہے. 309 00:24:21,760 --> 00:24:27,820 >> ہم نے دیکھا کہ ./buggy1 کے نتیجے segfault میں ہے. 310 00:24:27,820 --> 00:24:31,810 اصول میں آپ buggy1.c میں نظر نہیں فوری طور پر کرنا چاہئے. 311 00:24:31,810 --> 00:24:35,170 اس کے بجائے، ہم gdb کے ذریعے اس کو دیکھو گے. 312 00:24:35,170 --> 00:24:37,750 ، کہ جب تم میں سے کسی ایک کو آپ انقطاع غلطی (کور پھینک دیا) حاصل نوٹس 313 00:24:37,750 --> 00:24:40,850 آپ کو یہاں اس لئے بلایا بنیادی پر اس فائل کو حاصل ہے. 314 00:24:40,850 --> 00:24:45,200 اگر ہم LS L-ہم دیکھیں گے کہ بنیادی عام طور پر ایک بہت بڑی فائل ہے. 315 00:24:45,200 --> 00:24:51,580 یہ فائل کی بائٹس کی تعداد ہے، تو ایسا لگتا ہے جیسے یہ کلو بائٹ 250 کچھ. 316 00:24:51,580 --> 00:24:56,120 اس کی وجہ یہ ہے کہ بنیادی ڈمپ اصل میں ہے 317 00:24:56,120 --> 00:25:01,410 ہے جب آپ پروگرام کے گر کر تباہ، آپ کے پروگرام کی میموری کی حالت 318 00:25:01,410 --> 00:25:05,230 صرف اس فائل میں کاپی اور چسپاں ہو جاتا ہے. 319 00:25:05,230 --> 00:25:07,270 یہ اس فائل میں پھینک دیا جاتا ہے. 320 00:25:07,270 --> 00:25:13,060 جبکہ چل رہا تھا، اس پروگرام کے ارد گرد 250 کلو بائٹ کی میموری استعمال ہوا، 321 00:25:13,060 --> 00:25:17,040 اور وہ ہے جو اس فائل میں پھینک دیا گیا تھا. 322 00:25:17,040 --> 00:25:23,630 اب آپ اس فائل کو دیکھو، اگر ہم gdb buggy1 بنیادی کر سکتے ہیں. 323 00:25:23,630 --> 00:25:30,130 ہم buggy1 gdb، اور یہ کہ صرف gdb باقاعدگی سے شروع ہو جائے گا کر سکتے ہیں، 324 00:25:30,130 --> 00:25:33,800 اس کی ان پٹ فائل کے طور پر buggy1 کا استعمال کرتے ہوئے. 325 00:25:33,800 --> 00:25:38,260 لیکن اگر آپ gdb buggy1 بنیادی کرتے ہیں، تو اس خاص طور پر gdb شروع ہو رہا ہے 326 00:25:38,260 --> 00:25:40,330 اس بنیادی فائل میں دیکھ کر. 327 00:25:40,330 --> 00:25:45,560 اور تم buggy1 مطلب gdb کہہ رہی جانتا ہے کہ وہ بنیادی فائل buggy1 پروگرام سے آتا ہے. 328 00:25:45,560 --> 00:25:49,580 تو gdb buggy1 کور فوری طور پر ہمارے لانے کی جا رہی ہے 329 00:25:49,580 --> 00:25:52,060 جہاں پروگرام ختم ہوا. 330 00:25:57,720 --> 00:26:02,340 ہم یہاں پروگرام 11 سگنل، انقطاع غلطی کے ساتھ ختم. 331 00:26:02,340 --> 00:26:10,110 ہم اسمبلی، جو شاید بہت مدد گار نہیں ہے کی ایک لائن دیکھنے کے لئے ہو. 332 00:26:10,110 --> 00:26:15,360 لیکن اگر آپ کو بیٹی یا backtrace ٹائپ کریں، یہ تقریب ہو رہا ہے 333 00:26:15,360 --> 00:26:19,430 جو ہمیں ہماری موجودہ اسٹیک کے فریموں کی فہرست فراہم کرتا ہے. 334 00:26:19,430 --> 00:26:23,150 تو backtrace. ایسا لگتا ہے جیسا کہ ہم نے صرف دو اسٹیک فریم ہے. 335 00:26:23,150 --> 00:26:26,310 سب سے پہلے ہمارے اہم اسٹیک فریم ہے، 336 00:26:26,310 --> 00:26:29,810 اور دوسرا اس تقریب میں ہے کہ ہم میں ہوا کے لئے اسٹیک فریم ہے، 337 00:26:29,810 --> 00:26:34,440 جو لگتا ہے کہ ہم صرف اسمبلی کا کوڈ ہے. 338 00:26:34,440 --> 00:26:38,050 تو ہمارے مرکزی تقریب میں واپس جانے 339 00:26:38,050 --> 00:26:42,300 اور کہ ہم 1 فریم کر سکتے ہیں، اور مجھے لگتا ہے کہ ہم بھی کر سکتے ہیں، 340 00:26:42,300 --> 00:26:45,160 لیکن میں تقریبا نیچے کبھی نہیں - یا. جی ہاں. 341 00:26:45,160 --> 00:26:50,710 اوپر اور نیچے. کیا تم لاتا ہے ایک اسٹیک فریم، آپ نیچے لاتا ہے ایک اسٹیک فریم. 342 00:26:50,710 --> 00:26:53,240 کہ میں کبھی نہیں کرنے کے لئے استعمال کرتے ہیں. 343 00:26:53,240 --> 00:26:59,120 میں صرف خاص طور پر 1 فریم، جو 1 لیبل لگا فریم کا کہنا ہے کہ. 344 00:26:59,120 --> 00:27:01,750 1 فریم اہم اسٹیک فریم میں ہم لانے کی جا رہی ہے، 345 00:27:01,750 --> 00:27:05,570 اور یہ یہیں کوڈ کے مطابق ہم ہو کا کہنا ہے کہ. 346 00:27:05,570 --> 00:27:07,950 اگر ہم کوڈ کا ایک جوڑے کی لائنز چاہتے تھے، ہم فہرست کہہ سکتے ہیں، 347 00:27:07,950 --> 00:27:11,280 اور یہ کہ ہم سب کو اس کے ارد گرد کوڈ کی لائنیں دینے جا رہا ہے. 348 00:27:11,280 --> 00:27:13,360 لائن ہم segfaulted 6 تھی: 349 00:27:13,360 --> 00:27:17,360 اگر (strcmp ("CS50 پتھروں"، argv [1]) == 0). 350 00:27:17,360 --> 00:27:24,130 اگر یہ ابھی تک واضح نہیں ہے، تو آپ اسے یہاں سے براہ راست کیوں یہ سوچ segfaulted حاصل کر سکتے ہیں. 351 00:27:24,130 --> 00:27:28,800 لیکن ہم نے اسے مزید ایک قدم لے اور کہتے ہیں، کر سکتے ہیں "کیوں [1] argv segfault؟" 352 00:27:28,800 --> 00:27:38,830 چلو پرنٹ argv [1]، اور 0x0، جو اتارنا null پوائنٹر ہے کی طرح لگتا ہے. 353 00:27:38,830 --> 00:27:44,750 ہم CS50 پتھروں اور شہوت انگیز null strcmping کر رہے ہیں، اور اسی طرح جو segfault جا رہا ہے. 354 00:27:44,750 --> 00:27:48,280 اور کیوں ہے argv [1]، شہوت انگیز null؟ 355 00:27:48,640 --> 00:27:51,280 [طالب علم] کیونکہ ہم اسے نہیں دے نے کوئی کمانڈ لائن کے دلائل. 356 00:27:51,280 --> 00:27:53,390 جی ہاں. ہم اسے نہیں دے نے کوئی کمانڈ لائن کے دلائل. 357 00:27:53,390 --> 00:27:58,460 تو ./buggy1 صرف argv [0] ./buggy1 ہو جا رہا ہے. 358 00:27:58,460 --> 00:28:02,100 یہ ایک argv [1] کی ضرورت نہیں ہے، تو جو segfault جا رہا ہے. 359 00:28:02,100 --> 00:28:07,450 لیکن اگر اس کے بجائے، میں صرف CS50 کرتے ہیں، کا کہنا ہے کہ آپ کو ایک D حاصل کرنے کے لئے جا رہا ہے 360 00:28:07,450 --> 00:28:09,950 اس لیے کہ وہ ہے جو اسے کرنا چاہئے. 361 00:28:09,950 --> 00:28:15,240 buggy1.c کو دیکھ کر، اسے پرنٹ کرنا ہے "تم D ملتا ہے" - 362 00:28:15,240 --> 00:28:20,820 اگر argv [1] "CS50 پتھر نہیں ہے،" تم ایک D "، اور" تم نے ایک ملتا ہے! " 363 00:28:20,820 --> 00:28:25,660 تو اگر ہم ایک چاہتے ہیں، ہم اس سچ کے طور پر آپس میں موازنہ کرنے کی ضرورت ہے، 364 00:28:25,660 --> 00:28:28,710 جس کا مطلب ہے کہ یہ 0 کا موازنہ. 365 00:28:28,710 --> 00:28:31,100 تو argv [1] "CS50 پتھر" کی ضرورت ہے. 366 00:28:31,100 --> 00:28:35,660 اگر آپ کے پاس ہے کہ کمانڈ لائن پر کرنا چاہتے ہیں، آپ کو \ خلا سے بچنے کے لئے استعمال کرنے کی ضرورت ہے. 367 00:28:35,660 --> 00:28:41,690 تو CS50 \ پتھروں اور آپ کو ایک ملتا ہے! 368 00:28:41,690 --> 00:28:44,060 اگر آپ الٹا سلیش نہیں ہے، یہ کیوں نہیں کام کرتا ہے؟ 369 00:28:44,060 --> 00:28:47,190 [طالب علم] یہ دو مختلف دلائل ہے. >> جی ہاں. 370 00:28:47,190 --> 00:28:52,540 Argv [1] CS50 ہو جا رہا ہے، اور argv [2] پتھروں جا رہا ہے. ٹھیک ہے. 371 00:28:52,540 --> 00:28:56,470 >> اب ./buggy2 پھر segfault جا رہا ہے. 372 00:28:56,470 --> 00:29:01,880 اس کے بنیادی فائل کے ساتھ کھولنے کے بجائے، ہم صرف buggy2 براہ راست کھولتا ہوں، 373 00:29:01,880 --> 00:29:05,000 buggy2 gdb ہے. 374 00:29:05,000 --> 00:29:09,590 اب اگر ہم صرف ہمارے پروگرام کو چلانے کے، تو اس کا کہنا ہے کہ پروگرام سگنل SIGSEGV حاصل کرنے پر ہو رہا ہے، 375 00:29:09,590 --> 00:29:15,530 جو سگنل segfault، اور یہ وہ جگہ ہے جہاں اسے ہونا ہی ہوا. 376 00:29:15,530 --> 00:29:21,250 کی تلاش میں ہمارے backtrace میں، ہم دیکھتے ہیں کہ ہم تقریب oh_no میں تھے، 377 00:29:21,250 --> 00:29:23,900 جو تقریب ڈنکی، جو تقریب binky کی طرف سے کہا گیا تھا کی طرف سے کہا گیا تھا، 378 00:29:23,900 --> 00:29:26,460 جس میں مرکزی کی طرف سے بلایا گیا تھا. 379 00:29:26,460 --> 00:29:31,680 ہم دلائل بھی ان افعال کو دیکھ سکتے ہیں. 380 00:29:31,680 --> 00:29:34,680 ڈنکی اور binky دلیل 1 تھا. 381 00:29:34,680 --> 00:29:44,390 اگر ہم نے تقریب oh_no فہرست میں، ہم دیکھتے ہیں کہ oh_no صرف چار *** S نل = کر رہا ہے؛ 382 00:29:44,390 --> 00:29:47,410 * کی = "بوم"؛ 383 00:29:47,410 --> 00:29:50,330 کہ ناکام کیوں ہے؟ 384 00:29:54,330 --> 00:29:58,380 [طالب علم] آپ شہوت انگیز null پوائنٹر dereference نہیں کر سکتے ہیں؟ >> جی ہاں. 385 00:29:58,380 --> 00:30:06,090 یہ صرف کہہ رہے ہو کے نل ہے ہے، اس بات سے قطع نظر اگر وہ ایک چار ** ہوتا ہے، 386 00:30:06,090 --> 00:30:12,070 جو کہ آپ کس طرح اس کی تشریح پر منحصر ہے، یہ ایک تار پر ایک پوائنٹر پوائنٹر ہو سکتا ہے 387 00:30:12,070 --> 00:30:15,550 یا ڈور کی ایک صف ہے. 388 00:30:15,550 --> 00:30:21,430 کے نل ہے، تو * شہوت انگیز null پوائنٹر محولہ لقب ضبطی ہے، 389 00:30:21,430 --> 00:30:24,800 اور اسی طرح یہ کریش ہو رہا ہے. 390 00:30:24,800 --> 00:30:27,540 یہ تیز ترین طریقوں آپ ممکنہ segfault کر سکتے ہیں میں سے ایک ہے. 391 00:30:27,540 --> 00:30:31,300 یہ صرف ایک، شہوت انگیز null پوائنٹر اعلان کر رہا ہے اور فوری طور پر segfaulting. 392 00:30:31,300 --> 00:30:34,570 یہی oh_no کر رہی ہے. 393 00:30:34,570 --> 00:30:43,400 اگر ہم نے ایک فریم جاتے ہیں، تو ہم نے تقریب کہ oh_no بلایا میں حاصل کرنے کے لئے جا رہے ہیں. 394 00:30:43,400 --> 00:30:44,830 میں اسے نیچے کرنے کی ضرورت ہے. 395 00:30:44,830 --> 00:30:48,610 اگر آپ کو ایک حکم میں داخل نہیں ہے اور آپ صرف درج کریں پھر مارا، 396 00:30:48,610 --> 00:30:52,350 یہ گزشتہ حکم ہے کہ آپ بھاگ اعادہ کروں گا. 397 00:30:52,350 --> 00:30:56,610 ہم 1 فریم میں ہیں. 398 00:30:56,610 --> 00:31:04,650 اس فریم کی فہرست، ہم دیکھتے ہیں یہاں ہمارا کام ہے. 399 00:31:04,650 --> 00:31:08,520 آپ کی فہرست پھر مارا، یا آپ کو 20 کی فہرست کر سکتے ہیں کر سکتے ہیں اور اس کی فہرست گا. 400 00:31:08,520 --> 00:31:13,640 تقریب ڈنکی کا کہنا ہے کہ اگر میں 1 ہے، تو oh_no تقریب میں جانا، 401 00:31:13,640 --> 00:31:15,960 اور slinky تقریب میں جانا ہے. 402 00:31:15,960 --> 00:31:18,700 اور ہم جانتے ہیں کہ 1 ہے کیونکہ ہم کو یہاں دیکھ کر ہو 403 00:31:18,700 --> 00:31:22,560 کہ ڈنکی 1 دلیل کے ساتھ بلایا گیا تھا. 404 00:31:22,560 --> 00:31:27,560 یا آپ بس میں کر سکتے ہیں پرنٹ اور یہ کہنے میں 1 ہے. 405 00:31:27,560 --> 00:31:33,770 ہم ڈنکی میں ہیں، اور اگر ہم نے کسی دوسرے فریم جاؤ، ہم جانتے ہیں کہ ہم binky میں ختم ہو جائے گا. 406 00:31:33,770 --> 00:31:36,600 اوپر. اب ہم binky میں ہیں. 407 00:31:36,600 --> 00:31:41,340 سے پہلے نصف آپ کے وزٹرز کا ریکارڈ رکھا کاٹ سے فہرست - اس جشن کی فہرست - 408 00:31:41,340 --> 00:31:52,670 اسے بند کرنا شروع کر دیا کے طور پر اگر میں 0 ہے، تو ہم اس oh_no کو فون کرنے جا رہے ہیں، اور ڈنکی کو فون کریں. 409 00:31:52,670 --> 00:31:57,000 ہم جانتے ہیں کہ میں 1 سال کے تھے، تو اس ڈنکی ملاقات کی. 410 00:31:57,000 --> 00:32:05,030 اور اب ہم نے اہم واپس آ گئے ہیں، اور اہم int میں = رانڈ () 3٪ جا رہا ہے؛ 411 00:32:05,030 --> 00:32:08,790 یہ صرف آپ کو ایک بے ترتیب تعداد میں ہے کہ یا تو 0، 1، یا 2 دینے جا رہا ہے. 412 00:32:08,790 --> 00:32:12,780 یہ اس تعداد کے ساتھ binky کو فون کرنے جا رہا ہے، اور یہ 0 واپس آ جائیں گے. 413 00:32:12,780 --> 00:32:16,700 کی تلاش میں اس کو، 414 00:32:16,700 --> 00:32:19,880 صرف پروگرام کے ذریعے اسے فوری طور پر چلانے کے بغیر چلنے دستی طور پر، 415 00:32:19,880 --> 00:32:25,400 جس سے آپ اہم میں ایک بریک پوائنٹ قائم کرے گا، اس کا مطلب ہے کہ جب ہم پروگرام چلائیں 416 00:32:25,400 --> 00:32:31,020 آپ کے پروگرام تک چلتا ہے جب تک یہ ایک بریک پوائنٹ مار دیتی ہے. 417 00:32:31,020 --> 00:32:35,450 پروگرام چلا رہا تو اسے چلاتے ہیں، اور اس کے بعد یہ اہم تقریب مارا اور چلنا روک دیں گے. 418 00:32:35,450 --> 00:32:44,700 اب ہم نے اہم اندر ہو، اور قدم یا اگلے ہمیں کوڈ کی اگلی لائن میں لانے کی جا رہی ہے. 419 00:32:44,700 --> 00:32:47,050 آپ کو قدم یا آئندہ کیا کر سکتے ہیں. 420 00:32:47,050 --> 00:32:51,800 اگلے مار، اب میں کیا گیا ہے رانڈ () 3 فیصد ہے، تو ہم میں کی قدر کو پرنٹ کر سکتے ہیں مقرر کر دیا، 421 00:32:51,800 --> 00:32:55,280 یہ کہنا اور 1 ہے. 422 00:32:55,280 --> 00:32:58,110 اب یہ اس کی بات کہ ہم اگلے یا قدم کا استعمال کرتے ہیں. 423 00:32:58,110 --> 00:33:01,000 مجھے لگتا ہے کہ یہ گزشتہ ایک میں بات کی، لیکن ہم اگلے استعمال کرنے کے لئے چاہتے ہیں. 424 00:33:01,000 --> 00:33:06,000 جو اگر ہم قدم کا استعمال کرتے ہیں، ہم تقریب میں قدم، اصل بات کو دیکھو کا مطلب ہے کہ 425 00:33:06,000 --> 00:33:07,940 جو binky کے اندر کیا ہو رہا ہے. 426 00:33:07,940 --> 00:33:10,510 اگر ہم اگلے کا استعمال کرتے ہیں، تو اس کا مطلب ہے کہ ختم تقریب جانا 427 00:33:10,510 --> 00:33:14,070 اور صرف ہمارے مرکزی تقریب میں کوڈ کی اگلی لائن پر جانا. 428 00:33:14,070 --> 00:33:17,900 یہیں اس لائن پر، میں جہاں اس نے کہا کہ رانڈ () 3٪؛ 429 00:33:17,900 --> 00:33:21,320 اگر میں قدم کیا، یہ رانڈ کے نفاذ میں جانے 430 00:33:21,320 --> 00:33:25,110 اور وہاں کیا ہو رہا ہے کی طرف دیکھو، اور میں رانڈ تقریب کے ذریعے قدم سکتا ہے. 431 00:33:25,110 --> 00:33:26,920 لیکن میں رانڈ تقریب کے بارے میں پرواہ نہیں کرتے. 432 00:33:26,920 --> 00:33:30,190 میں صرف بنیادی کوڈ کی اگلی لائن پر جانا چاہتے ہو، تو میں اگلے کا استعمال کرتے ہیں. 433 00:33:30,190 --> 00:33:35,800 لیکن اب میں binky تقریب کے بارے میں خیال کرتے ہیں، تو میں اس میں قدم کرنا چاہتے ہیں. 434 00:33:35,800 --> 00:33:37,730 اب میں binky میں ہوں. 435 00:33:37,730 --> 00:33:42,040 کوڈ کی پہلی لائن کا کہنا ہے کہ اگر (0 ==)، میں ایک قدم لے جا رہا ہے، 436 00:33:42,040 --> 00:33:44,930 ہم دیکھتے ہیں ہم ڈنکی میں ختم. 437 00:33:44,930 --> 00:33:51,620 اگر ہم فہرست چیزیں، ہم دیکھتے ہیں کہ اس کی جانچ پڑتال میں = 0 ہے. 438 00:33:51,620 --> 00:33:55,470 0 کے برابر نہیں ہے، تو یہ کسی اور کی حالت گئے، 439 00:33:55,470 --> 00:33:59,540 جس میں ڈنکی () کو فون کرنے جا رہا ہے. 440 00:33:59,540 --> 00:34:04,030 تم الجھن میں ہو سکتی ہے. 441 00:34:04,030 --> 00:34:07,380 اگر آپ کو ان لائنوں میں صرف براہ راست دیکھو، آپ کے خیال میں، ہو سکتا ہے اگر (0 ==)، 442 00:34:07,380 --> 00:34:10,800 ٹھیک ہے، تو میں ایک قدم لیا اور اب میں ڈنکی (میں) میں ہوں، 443 00:34:10,800 --> 00:34:14,120 آپ کو لگتا ہے کہ اس کا یہ مطلب لازما میں 0 = یا کچھ اور ہو سکتا ہے. 444 00:34:14,120 --> 00:34:18,980 نہیں، یہ صرف کا مطلب ہے کہ وہ جانتا ہے کہ براہ راست لائن ڈنکی () چپکی کر سکتے ہیں. 445 00:34:18,980 --> 00:34:23,300 کیونکہ میں 0 نہیں ہے، اگلے قدم کسی اور کو ختم کرنے کے لئے نہیں ہے. 446 00:34:23,300 --> 00:34:26,239 پھر ایک لائن اس کو روکنے کے لئے جا رہا ہے نہیں ہے. 447 00:34:26,239 --> 00:34:31,570 یہ صرف اگلی لائن ہے، اصل میں جس ڈنکی ہے (میں) پھانسی کر سکتے ہیں جانے کے لئے جا رہا ہے. 448 00:34:31,570 --> 00:34:36,090 ڈنکی (میں) میں نمایاں اضافے، ہم دیکھتے ہیں اگر (1 ==). 449 00:34:36,090 --> 00:34:42,670 ہم میں = 1 جانتے ہیں، تو جب ہم قدم، ہم جانتے ہیں کہ ہم oh_no میں کو ختم کرنے جا رہے ہیں 450 00:34:42,670 --> 00:34:46,489 کیونکہ میں = 1 تقریب oh_no، جس سے آپ میں قدم کر سکتے ہیں کہتے ہیں، 451 00:34:46,489 --> 00:34:52,969 جو قائم کرنے کے لئے کی جا رہی ہے چار *** S = اور فوری طور پر "بوم"، شہوت انگیز null. 452 00:34:54,270 --> 00:34:59,690 اور پھر اصل میں buggy2 کے نفاذ میں تلاش 453 00:34:59,690 --> 00:35:04,590 0، 1، یا 2 - - کالنگ binky، اس میں صرف ایک بے ترتیب تعداد ہو رہی ہے 454 00:35:04,590 --> 00:35:10,610 جو اگر میں 0 یہ ہے کہ یہ oh_no مطالبہ ہے، اور یہ ڈنکی مطالبہ، یہاں آتا ہے. 455 00:35:10,610 --> 00:35:18,100 اگر میں 1 ہے، اور کال oh_no slinky فون، جو یہاں آ، 456 00:35:18,100 --> 00:35:20,460 اگر میں 2 ہے، oh_no فون کریں. 457 00:35:20,460 --> 00:35:24,720 میں بھی نہیں ایک راستہ ہے لگتا ہے - 458 00:35:24,720 --> 00:35:30,030 کیا کسی کو بھی یہ ایک پروگرام ہے کہ نہیں segfault گا بنانے کا ایک طریقہ دیکھا ہے؟ 459 00:35:30,030 --> 00:35:37,530 کیونکہ جب تک کہ میں کچھ یاد کر رہا ہوں، اگر میں 0، آپ کو فوری طور پر segfault گے، 460 00:35:37,530 --> 00:35:41,250 اور آپ کو ایک تقریب ہے جو اگر میں 1 ہے آپ segfault جانا، 461 00:35:41,250 --> 00:35:44,540 اور آپ کو ایک تقریب میں جہاں اگر میں آپ segfault 2. 462 00:35:44,540 --> 00:35:46,810 کوئی تو بات جو تم کرتے ہو، تم، segfault. 463 00:35:46,810 --> 00:35:52,380 >> میں فکسنگ یہ چار *** S نل = کرنے کے بجائے ایک ہی راستہ لگتا ہے، 464 00:35:52,380 --> 00:35:55,610 آپ اس سٹرنگ کے لئے جگہ malloc سکتا ہے. 465 00:35:55,610 --> 00:36:04,230 sizeof کیا - ہم (sizeof) malloc کر سکتے ہیں؟ 466 00:36:09,910 --> 00:36:15,190 [طالب علم] 5 (چار) *؟ >> یہ درست لگتا ہے؟ 467 00:36:15,190 --> 00:36:21,060 میں سنبھالنے کے یہ کام اگر میں واقعی میں اس دوڑ رہا ہوں، لیکن یہ نہیں ہے کہ میں کیا دیکھ رہا ہوں. 468 00:36:24,400 --> 00:36:32,940 کے کی قسم کی طرف دیکھو. چلو int * شامل ہے، تو int * X. 469 00:36:32,940 --> 00:36:35,600 میں malloc کرنا (sizeof (int)). 470 00:36:35,600 --> 00:36:40,490 یا اگر میں 5 میں سے ایک صف چاہتے تھے، مجھے کیا کرنا ((int) sizeof 5)؛ 471 00:36:40,490 --> 00:36:44,210 کیا ہوگا اگر میں ایک int ** ہے؟ 472 00:36:46,260 --> 00:36:49,140 کیا میں malloc گے؟ 473 00:36:49,140 --> 00:36:53,510 پوائنٹر [طالب علم] سائز. >> جی ہاں. (sizeof (int *))؛ 474 00:36:53,510 --> 00:36:56,960 یہاں نیچے اسی بات. 475 00:36:56,960 --> 00:37:01,280 I (sizeof (چار) *) کرنا چاہتے ہیں؛ 476 00:37:06,170 --> 00:37:12,840 یہ پوائنٹر کہ "بوم" کی طرف اشارہ کے لئے جگہ مختص کی جا رہی ہے. 477 00:37:12,840 --> 00:37:15,330 میں نے "بوم" خود کے لئے جگہ مختص کرنے کی ضرورت نہیں ہے 478 00:37:15,330 --> 00:37:17,210 کیونکہ یہ بنیادی طور پر جو میں نے پہلے کہا کے برابر ہے 479 00:37:17,210 --> 00:37:20,870 چار * X = "بوم". 480 00:37:20,870 --> 00:37:27,950 "بوم" پہلے ہی موجود ہے. یہ میموری صرف پڑھنے کے علاقے میں موجود ہوتا ہے. 481 00:37:27,950 --> 00:37:35,200 لیکن یہ پہلے سے ہی موجود ہے، جس میں کوڈ کی اس لائن کا مطلب ہے کہ، اگر کے چار ** ہے، 482 00:37:35,200 --> 00:37:43,900 تو کی * ایک چار * ہے اور آپ کو یہ حروف * قائم کرنے "بوم" کی طرف اشارہ کر رہے ہیں. 483 00:37:43,900 --> 00:37:50,040 اگر میں کے میں "بوم" کی کاپی کرنے کے لئے کرنا چاہتا تھا، تو میں کے لئے جگہ مختص کرنے کی ضرورت ہو گی. 484 00:37:55,170 --> 00:38:03,900 میں کروں گا * کے malloc = (sizeof (چار) 5 *)؛ 485 00:38:03,900 --> 00:38:06,210 کیوں 5؟ 486 00:38:06,210 --> 00:38:10,860 کیوں نہیں 4؟ ایسا لگتا ہے جیسے "بوم" 4 حروف ہے. >> [طالب علم]، شہوت انگیز null کردار. 487 00:38:10,860 --> 00:38:14,580 جی ہاں. اپنے تمام ڈور کی شہوت انگیز null کردار کی ضرورت کے لئے جا رہے ہیں. 488 00:38:14,580 --> 00:38:23,590 اب میں strcat طرح کچھ کر سکتے ہیں - ایک تار کاپی کرنے کے لئے کام کیا ہے؟ 489 00:38:23,590 --> 00:38:28,520 [طالب علم] cpy؟ >> strcpy. 490 00:38:28,520 --> 00:38:32,700 آدمی strcpy. 491 00:38:36,120 --> 00:38:39,590 تو strcpy یا strncpy. 492 00:38:39,590 --> 00:38:43,410 strncpy تھوڑا محفوظ ہے کے بعد آپ کی وضاحت کر سکتے ہیں کس طرح بہت سے حروف، 493 00:38:43,410 --> 00:38:46,190 لیکن یہاں یہ بات کیونکہ ہم جانتے ہیں نہیں ہے. 494 00:38:46,190 --> 00:38:50,340 تو strcpy اور دلائل میں دیکھیں. 495 00:38:50,340 --> 00:38:53,100 پہلی دلیل ہماری منزل ہے. 496 00:38:53,100 --> 00:38:56,770 دوسری دلیل ہماری ذریعہ ہے. 497 00:38:56,770 --> 00:39:10,310 ہم ہماری منزل * میں کاپی کرنے کے لئے جا رہے ہیں پوائنٹر "بوم" S. 498 00:39:10,310 --> 00:39:19,820 آپ کو بجائے کیا ہم نے ایک strcpy کے ساتھ اس سے پہلے کیوں کرنا چاہتے ہو سکتا ہے 499 00:39:19,820 --> 00:39:22,800 کے * = "بوم"؟ 500 00:39:22,800 --> 00:39:28,630 آپ ایسا کرنا چاہتے ہیں کر سکتے ہیں کی ایک وجہ ہے، لیکن ہے کہ اس کی وجہ کیا ہے؟ 501 00:39:28,630 --> 00:39:31,940 [طالب علم] اگر آپ نے "بوم" میں کچھ تبدیل کرنا چاہتے ہیں. >> جی ہاں. 502 00:39:31,940 --> 00:39:37,950 اب میں کی طرح کچھ کر سکتے ہیں [0] = 'X'؛ 503 00:39:37,950 --> 00:39:48,190 کیونکہ کے پوائنٹس ڈھیر پر ڈھیر اور اس خلا کی طرف اشارہ کرتے ہوئے ہے 504 00:39:48,190 --> 00:39:52,320 ڈھیر، جس میں "بوم" ذخیرہ کرنے کے بارے میں زیادہ جگہ پر ایک پوائنٹر ہے. 505 00:39:52,320 --> 00:39:55,150 تو "بوم" کی یہ کاپی ڈھیر میں جمع کیا جا رہا ہے. 506 00:39:55,150 --> 00:39:58,780 تکنیکی طور پر ہمارے پروگرام میں "بوم" کی دو کاپیاں. 507 00:39:58,780 --> 00:40:03,500 پہلے ایک ہے کہ وہ صرف اس "بوم" سٹرنگ مسلسل کی طرف سے دی گئی ہے، 508 00:40:03,500 --> 00:40:09,250 اور "بوم" کی دوسری کاپی، strcpy "بوم" کی نقل ہے. 509 00:40:09,250 --> 00:40:13,100 لیکن "بوم" کی نقل کی جا رہی ہے ڈھیر پر محفوظ، اور ڈھیر آپ کو تبدیل کرنے کے لئے آزاد ہیں. 510 00:40:13,100 --> 00:40:17,250 تاکہ صرف پڑھنے ڈھیر نہیں ہے، اس کا مطلب ہے کہ [0] 511 00:40:17,250 --> 00:40:20,500 تم نے "بوم" کی قدر تبدیل کرنے کی جا رہی ہے. 512 00:40:20,500 --> 00:40:23,130 ہم آپ کو ان حروف کو تبدیل کرنے جا رہا ہے. 513 00:40:23,130 --> 00:40:26,640 >> سوال؟ 514 00:40:27,740 --> 00:40:29,290 ٹھیک ہے. 515 00:40:29,290 --> 00:40:35,500 >> buggy3 پر منتقل، چلو gdb buggy3. 516 00:40:35,500 --> 00:40:39,840 ہم صرف اس کے چلانے اور ہم دیکھتے ہیں ہم segfault ایک. 517 00:40:39,840 --> 00:40:46,550 اگر backtrace ہم صرف دو افعال ہیں. 518 00:40:46,550 --> 00:40:52,970 اگر ہم ہمارے مرکزی تقریب میں، ہم دیکھتے ہیں کہ ہم نے اس لائن پر segfaulted. 519 00:40:52,970 --> 00:41:00,180 تو اس لائن کو دیکھ کر، (int لائن = 0؛ fgets یہ سب برابر نل نہیں ہے. 520 00:41:00,180 --> 00:41:03,770 لائن + +). 521 00:41:03,770 --> 00:41:08,010 ہمارے گزشتہ فریم _IO_fgets بلایا گیا تھا. 522 00:41:08,010 --> 00:41:10,720 تم نے دیکھا ہے کہ گے، بلٹ میں C افعال کے ساتھ ایک بہت 523 00:41:10,720 --> 00:41:15,350 کہ جب تم segfault ملتا ہے، وہاں بہت ہی خفیہ تقریب نام ہو جائے گا 524 00:41:15,350 --> 00:41:18,090 اس _IO_fgets کی طرح. 525 00:41:18,090 --> 00:41:21,770 لیکن یہ اس fgets کال سے متعلق ہو رہا ہے. 526 00:41:21,770 --> 00:41:25,850 یہاں اندر کہیں، ہم segfaulting کر رہے ہیں. 527 00:41:25,850 --> 00:41:30,340 اگر ہم دلائل میں fgets دیکھو، ہم بفر پرنٹ کر سکتے ہیں. 528 00:41:30,340 --> 00:41:41,180 آو پرنٹ کے طور پر - اوہ، نہیں. 529 00:41:48,980 --> 00:41:51,900 پرنٹ بالکل کام کرنے کے لئے کے طور پر میں اس سے کرنا چاہتے ہیں نہیں ہے. 530 00:41:55,460 --> 00:41:58,000 اصل پروگرام میں نظر ہے. 531 00:42:02,200 --> 00:42:09,640 بفر کردار صف ہے. 128 حروف کے حروف کی صف ہے. 532 00:42:09,640 --> 00:42:14,980 تو جب میں نے کا کہنا ہے کہ پرنٹ بفر، یہ ان 128 حروف کو پرنٹ کرنے کے لئے جا رہا ہے، 533 00:42:14,980 --> 00:42:18,300 جو مجھے لگتا ہے کہ ہے جو توقع ہے. 534 00:42:18,300 --> 00:42:21,390 کیا میں کے لئے لگ رہا تھا بفر کا پتہ پرنٹ، 535 00:42:21,390 --> 00:42:23,680 لیکن اس سے آپ کے وزٹرز کا ریکارڈ رکھا واقعی نہیں زیادہ کہو. 536 00:42:23,680 --> 00:42:30,770 تو جب میں یہاں X بفر کہنا ہو، آپ کے وزٹرز کا ریکارڈ رکھا 0xbffff090 ظاہر کرتا ہے، 537 00:42:30,770 --> 00:42:38,690 جو، اگر آپ کو پہلے یا کچھ نقطہ سے یاد ہے، Oxbffff اسٹیک ish ایک ایسے خطے میں جاتا ہے. 538 00:42:38,690 --> 00:42:46,020 اسٹیک کہیں صرف 0xc000 کے تحت شروع کرنے دیتی ہے. 539 00:42:46,020 --> 00:42:51,890 اس پتے کو دیکھ کر، میں جانتا ہوں کہ بفر اسٹیک ہو رہا ہے. 540 00:42:51,890 --> 00:43:04,500 میرے پروگرام کو دوبارہ شروع کرنے، چلانے، بفر میں ہم نے دیکھا حروف کے اس ترتیب 541 00:43:04,500 --> 00:43:06,530 جو بہت معنی ہیں. 542 00:43:06,530 --> 00:43:12,270 پھر فائل، پرنٹنگ جو فائل کی طرح لگتی ہے؟ 543 00:43:15,120 --> 00:43:17,310 [طالب علم]، اتارنا null. >> جی ہاں. 544 00:43:17,310 --> 00:43:22,610 فائل کی قسم کی فائل * ہے، تو یہ ایک پوائنٹر ہے، 545 00:43:22,610 --> 00:43:26,610 اور کہ پوائنٹر کی قدر خالی ہے. 546 00:43:26,610 --> 00:43:33,240 تو fgets ایک بالواسطہ طریقہ اس پوائنٹر سے پڑھ کرنے کی کوشش کی جا رہی ہے، 547 00:43:33,240 --> 00:43:37,320 لیکن یہ اس لئے کہ پوائنٹر تک رسائی حاصل کرنے کے لئے، یہ dereference ہے. 548 00:43:37,320 --> 00:43:40,550 یا، تک رسائی حاصل کرنے کے لئے یہ کیا ہے، یہ dereferences کی طرف اشارہ کرتے ہوئے کرنا چاہئے. 549 00:43:40,550 --> 00:43:43,810 تو یہ ایک لوڈ، اتارنا null پوائنٹر اور اس segfaults محولہ لقب ضبطی ہے. 550 00:43:46,600 --> 00:43:48,730 میں نے اسے وہاں دوبارہ شروع کر سکتے ہیں. 551 00:43:48,730 --> 00:43:52,170 اگر ہم ہماری اہم موڑ پر توڑ اور چلاتے ہیں، 552 00:43:52,170 --> 00:43:57,320 کوڈ کی پہلی لائن چار * فائل کا نام = "nonexistent.txt" ہے؛ 553 00:43:57,320 --> 00:44:00,870 وہ کیوں اس پروگرام ناکام ہو جاتا ہے کے طور پر ایک بہت بڑا اشارہ دینا چاہئے. 554 00:44:00,870 --> 00:44:06,080 اگلے ٹائپ آپ کے وزٹرز کا ریکارڈ رکھا اگلی لائن کی طرف لاتا ہے، جہاں میں نے اس فائل کو کھولنے، 555 00:44:06,080 --> 00:44:11,140 اور پھر میں ہماری لائن، جہاں ایک بار میں اگلے مارا میں فوری طور پر، اس پر segfault جا رہا ہے. 556 00:44:11,140 --> 00:44:16,880 کیا کوئی بھی وجہ سے ہم segfaulting ہو سکتا ہے پر پھینک کرنا چاہتے ہیں؟ 557 00:44:16,880 --> 00:44:19,130 [طالب علم] فائل موجود ہی نہیں ہے. >> جی ہاں. 558 00:44:19,130 --> 00:44:22,250 یہ ایک اشارہ کرنا ہے 559 00:44:22,250 --> 00:44:29,570 ہے کہ جب بھی آپ کو ایک فائل کھولنے رہے ہیں آپ کو چیک کرنے کے لیے کرنے کی ضرورت ہے کہ اصل فائل موجود ہے. 560 00:44:29,570 --> 00:44:31,510 تو یہاں "nonexistent.txt"؛ 561 00:44:31,510 --> 00:44:34,700 ہم پڑھنے کے لیے fopen فائلنام، جب تو ہم کہنے کی ضرورت 562 00:44:34,700 --> 00:44:45,870 اور اگر (فائل نل ==) کا کہنا ہے کہ printf ("فائل موجود ہی نہیں ہے!" 563 00:44:45,870 --> 00:44:56,340 یا - ابھی تک بہتر - FILENAME)؛ 1 واپسی؛ 564 00:44:56,340 --> 00:45:00,300 تو اب ہم اگر یہ نل ہے کو دیکھنے کے لئے چیک کرنے کے لیے 565 00:45:00,300 --> 00:45:03,930 اصل سے پہلے اور اس فائل سے پڑھنے کے لئے کی کوشش کر رہے ہیں. 566 00:45:03,930 --> 00:45:08,800 ہم اسے ریمیک ہے کہ اس کام کو دیکھنے کے لئے کر سکتے ہیں. 567 00:45:11,020 --> 00:45:14,970 میں ایک نئی سطر میں شامل کرنے کا ارادہ ہے. 568 00:45:21,090 --> 00:45:25,290 تو اب nonexistent.txt کا کوئی وجود نہیں ہے. 569 00:45:26,890 --> 00:45:30,040 تم اس طرح بات کے لئے ہمیشہ جانچنا چاہئے. 570 00:45:30,040 --> 00:45:33,870 آپ کو اگر fopen نل واپس دیکھنے کے لئے ہمیشہ جانچنا چاہئے. 571 00:45:33,870 --> 00:45:38,170 آپ کو ہمیشہ اس بات کا یقین کر لیں کہ malloc نل واپس نہیں کرتا ہے بنانے کے لئے چیک کرنے کے لیے چاہیے، 572 00:45:38,170 --> 00:45:41,410 یا آپ کسی segfault. 573 00:45:42,200 --> 00:45:45,930 >> اب buggy4.c. 574 00:45:49,190 --> 00:45:58,440 چل رہا ہے. میں نے یہ اندازہ ان پٹ یا ممکنہ لامحدود looping کے لئے انتظار کر رہی ہوں. 575 00:45:58,440 --> 00:46:01,870 جی ہاں، یہ لامحدود looping ہے. 576 00:46:01,870 --> 00:46:05,560 تو buggy4. ایسا لگتا ہے جیسے ہم لامحدود looping ہیں. 577 00:46:05,560 --> 00:46:12,590 ہمیں مرکزی توڑ کر سکتے ہیں، ہمارے پروگرام چلاتے ہیں. 578 00:46:12,590 --> 00:46:20,180 gdb میں، جب تک کے طور پر مختصر نام جو آپ استعمال کرتے ہیں وہ واضح ہے 579 00:46:20,180 --> 00:46:23,420 یا مخففات ہے کہ وہ آپ کے لئے فراہم کرتے ہیں، خاص 580 00:46:23,420 --> 00:46:29,020 تو آپ (ن) کا استعمال اگلے تمام طریقے سے ٹائپ کرنے کی بجائے اگلے کرنے کے لئے استعمال کر سکتے ہیں. 581 00:46:29,020 --> 00:46:33,730 اور اب کہ میں متاثر (ن) ایک بار ہے، میں صرف درج کریں مارا اگلے جا رکھنے کے لئے کر سکتے ہیں 582 00:46:33,730 --> 00:46:36,640 ن درج کریں مارا، (ن) درج کریں، (ن) درج کریں کرنے کے بجائے. 583 00:46:36,640 --> 00:46:44,630 ایسا لگتا ہے جیسے میں لوپ [میں] 0 صف کی ترتیب ہے کے لئے کسی قسم میں ہوں. 584 00:46:44,630 --> 00:46:50,510 ایسا لگتا ہے جیسا کہ میں توڑ کبھی باہر نہیں رہا ہوں لوپ کے لئے اس کی ہے. 585 00:46:50,510 --> 00:46:54,780 اگر میں پرنٹ، تو میں 2 ہے، تو میں اگلے چلے جائیں گے. 586 00:46:54,780 --> 00:46:59,250 میں میں پرنٹ، میں 3 ہے، تو میں اگلے گے. 587 00:46:59,250 --> 00:47:05,360 میں میں پرنٹ اور میں 3 کریں گے. اگلا، مجھے پرنٹ، 4 ہے. 588 00:47:05,360 --> 00:47:14,520 اصل میں، پرنٹ sizeof (صف)، تو صف کا سائز 20 ہے. 589 00:47:16,310 --> 00:47:32,870 لیکن ایسا لگتا ہے کہ وہاں تک کچھ ہوتا ہے جانے کے لئے کچھ خاص gdb کا حکم ہے. 590 00:47:32,870 --> 00:47:37,620 یہ متغیر کی قدر پر ایک شرط قائم کی طرح ہے. لیکن مجھے یاد نہیں ہے کہ یہ کیا ہے. 591 00:47:37,620 --> 00:47:44,100 تو اگر ہم جا کر رہو - 592 00:47:44,100 --> 00:47:47,120 یہ تم کیا کہہ رہے تھے؟ کیا آپ کو لے آئے ہو؟ 593 00:47:47,120 --> 00:47:50,500 [طالب علم] میں ظاہر شامل کیا - >> جی ہاں. تو ظاہر میں مدد کر سکتے ہیں. 594 00:47:50,500 --> 00:47:54,530 اگر ہم بس میں ظاہر ہے، یہ یہاں ڈال میں کی قدر کیا ہے 595 00:47:54,530 --> 00:47:56,470 تو میں اسے باہر ہر وقت پرنٹ کی ضرورت نہیں ہے. 596 00:47:56,470 --> 00:48:02,930 اگر ہم صرف اگلے جا رہو، ہم 0، 1، 2، 3، 4، 5، 0، 1، 2، 3، 4، 5، 0، 1، 2، 3، 4، 5 دیکھتے ہیں. 597 00:48:02,930 --> 00:48:08,530 کچھ بہت غلط ہو رہا ہے، اور میں 0 کی جا رہی ہے ری سیٹ. 598 00:48:13,330 --> 00:48:22,220 کی تلاش میں buggy4.c میں، ہم دیکھتے ہیں جو کچھ ہوتا ہے int صف [5]؛ 599 00:48:22,220 --> 00:48:26,200 (، میں <= sizeof (صف)، میں + + میں = 0) کے لئے 600 00:48:26,200 --> 00:48:28,550 صف [میں] = 0؛ 601 00:48:28,550 --> 00:48:31,390 جو ہم دیکھتے ہیں وہ غلط ہے؟ 602 00:48:31,390 --> 00:48:39,480 ایک اشارہ کے طور پر، جب میں buggy4 gdb کر رہے تھے - دو اہم باگو، توڑ - 603 00:48:39,480 --> 00:48:45,980 میں پرنٹ sizeof (صف) نے دیکھا کس حالت میں ہے جہاں میں آخر میں توڑ کرنا چاہئے. 604 00:48:47,690 --> 00:48:51,100 میں کہاں ہوں؟ میں کیا ہیں؟ 605 00:48:51,100 --> 00:48:54,280 میں ابھی تک اعلان نہیں کیا. 606 00:48:54,280 --> 00:48:58,680 تو sizeof (صف) پرنٹ اور یہ 20 ہے، 607 00:48:58,680 --> 00:49:06,690 ہونے کی امید سے اپنے صف 5 سائز کے ہے اور یہ 5 integers ہے، 608 00:49:06,690 --> 00:49:12,410 تو ساری بات 5 * sizeof (int) بائٹس ہونا چاہئے، جہاں sizeof (int) 4 ہو جاتا ہے. 609 00:49:12,410 --> 00:49:14,780 تو sizeof (صف) 20 ہے. 610 00:49:14,780 --> 00:49:17,420 یہ کیا ہونا چاہئے؟ 611 00:49:17,420 --> 00:49:21,720 [طالب علم] sizeof (int) کی طرف سے تقسیم کیا ہے. >> جی ہاں، / sizeof (int). 612 00:49:21,720 --> 00:49:30,630 ایسا لگتا ہے جیسے ابھی بھی ایک مسئلہ ہے یہاں. مجھے لگتا ہے کہ یہ تو صرف ہونا چاہئے < 613 00:49:30,630 --> 00:49:36,960 کیونکہ یہ ہمیشہ بہت زیادہ ہے <اور = <کبھی نہیں. 614 00:49:36,960 --> 00:49:44,860 اب ہم یہ کیوں اصل میں ٹوٹ گیا تھا کے بارے میں سوچنا. 615 00:49:44,860 --> 00:49:53,370 کیا کسی کو اندازہ لوپ میں سے ہر ایک iteration کے ذریعے کیوں کیا گیا 0 ری سیٹ؟ 616 00:50:01,300 --> 00:50:09,350 یہاں ہو رہا ہے کے اندر صرف ایک چیز جو صف [میں] 0 قائم کرنے جا رہا ہے ہے. 617 00:50:09,350 --> 00:50:15,350 تو کسی نہ کسی طرح، کوڈ کا یہ لائن ہمارے int جس کے نتیجے میں 0 مقرر ہے. 618 00:50:16,730 --> 00:50:23,130 [طالب علم] یہ بھی ہو سکتا ہے کیونکہ اس میں کے اس حصے کی یاد زیرکر رہا ہے کیا جا سکا 619 00:50:23,130 --> 00:50:27,970 یہ سوچتا ہے کہ جب یہ صف کے اگلے عنصر ہے؟ >> [Bowden] جی ہاں. 620 00:50:27,970 --> 00:50:33,880 جب ہم ہمارے صف کے آخر سے باہر جا رہے ہیں، 621 00:50:33,880 --> 00:50:39,870 کسی نہ کسی طرح کہ خلا ہے کہ ہم زیرکر رہا ہے کر رہے ہیں میں کی قدر زیرکر رہا ہے. 622 00:50:39,870 --> 00:50:48,030 اور اگر ایسا ہے تو ہم نے buggy4 میں دیکھتا ہوں، اہم رن، توڑ 623 00:50:48,030 --> 00:50:53,120 ہم میں کا پتہ پرنٹ. 624 00:50:53,120 --> 00:50:57,280 ایسا لگتا ہے جیسے یہ bffff124 ہے. 625 00:50:57,280 --> 00:51:03,930 اب صف کا پتہ پرنٹ [0]. 110. 626 00:51:03,930 --> 00:51:06,290 کیا [1] کے بارے میں کیا؟ 114. 627 00:51:06,290 --> 00:51:07,920 [2]، 118. 628 00:51:07,920 --> 00:51:14,530 11c، 120. [5] صف bfff124 ہے. 629 00:51:14,530 --> 00:51:26,990 صف تو [5] میں، جس کا مطلب ہے کہ صف [5] میں ہے کے طور پر ایک ہی پتہ ہے. 630 00:51:26,990 --> 00:51:30,720 اگر وہ ایک ہی پتہ ہے، وہ ایک ہی چیز ہیں. 631 00:51:30,720 --> 00:51:38,410 تو جب ہم [5] صف قائم 0، ہم میں 0 قائم کرنے کر رہے ہیں. 632 00:51:38,410 --> 00:51:46,070 اور اگر آپ اسٹیک کی شرائط میں اس کے بارے میں کیا سوچتے ہیں، 633 00:51:46,070 --> 00:51:55,590 int میں نے سب سے پہلے اعلان کیا ہے، جس کا مطلب ہے کہ میں اسٹیک پر کچھ جگہ مل جاتی ہے. 634 00:51:55,590 --> 00:52:04,730 پھر [5] صف مختص، تو 20 بائٹس اسٹیک پر مختص ہیں. 635 00:52:04,730 --> 00:52:08,400 لہذا میں نے سب سے پہلے مختص ہو جاتا ہے، تو یہ 20 بائٹس مختص کیے جاتے ہیں. 636 00:52:08,400 --> 00:52:11,400 تو میں درست صف سے پہلے ہوتا ہے، 637 00:52:11,400 --> 00:52:19,230 اور اس وجہ سے راستے سے، گزشتہ ہفتے میں ایسا کہا، جہاں تکنیکی اسٹیک نیچے اگنے، 638 00:52:19,230 --> 00:52:28,520 جب آپ کو ایک صف میں انڈیکس، ہم نے بات کی ضمانت ہیں کہ صف میں 0th پوزیشن 639 00:52:28,520 --> 00:52:31,970 ہمیشہ صف میں پہلی پوزیشن سے پہلے ہوتا ہے. 640 00:52:31,970 --> 00:52:35,900 یہ کس طرح میں نے گزشتہ ہفتے اس متوجہ ہے. 641 00:52:35,900 --> 00:52:42,210 نوٹس ہے کہ ہم نے نیچے دیے گئے 0 پتہ ہے اور سب سے اوپر ہم ایڈریس کی زیادہ سے زیادہ ہے. 642 00:52:42,210 --> 00:52:44,880 اسٹیک ہمیشہ نیچے بڑھ رہی ہے. 643 00:52:48,100 --> 00:52:53,500 چلو کا کہنا ہے کہ ہم میں مختص. 644 00:52:53,500 --> 00:52:59,680 ہم عددی مختص میں ہے، جس کا مطلب ہے چلو یہاں عددی میں مختص ہو جاتا ہے کا کہنا ہے کہ. 645 00:52:59,680 --> 00:53:06,420 پھر ہم 5 integers کے بارے میں ہمارے صف، جو اس کے نیچے اس کا مطلب، مختص 646 00:53:06,420 --> 00:53:11,230 کے بعد اسٹیک نیچے بڑھ رہی ہے، ان 5 integers مختص کیے جاتے ہیں. 647 00:53:11,230 --> 00:53:15,900 لیکن کس طرح arrays کام کی وجہ سے، ہم نے بات کی ضمانت رہے ہیں کہ صف میں پہلی پوزیشن 648 00:53:15,900 --> 00:53:22,260 ہمیشہ ایک صف میں دوسری بات سے کم پتہ ہے. 649 00:53:22,260 --> 00:53:28,270 تو صف پوزیشن 0 ہمیشہ یاد میں سب سے پہلے ہونا ہے، 650 00:53:28,270 --> 00:53:30,700 جبکہ صف 1 کی حیثیت اس کے بعد ہونے 651 00:53:30,700 --> 00:53:33,310 اور صف 2 کی حیثیت اس کے بعد ہونے ہیں، 652 00:53:33,310 --> 00:53:37,900 جس کا مطلب ہے کہ صف پوزیشن 0 کہیں نیچے ہو یہاں، 653 00:53:37,900 --> 00:53:40,690 صف 1 پوزیشن سے اوپر ہوگا 654 00:53:40,690 --> 00:53:45,530 وجہ سے منتقل اعلی پتے کا مطلب ہے سے زیادہ سے زیادہ ایڈریس یہاں ہے. 655 00:53:45,530 --> 00:53:50,490 [0] صف یہاں تو، صف [1] اپ یہاں صف [2] اپ یہاں [3] صف یہاں. 656 00:53:50,490 --> 00:53:55,620 نوٹس پہلے کہ ہم کس طرح عددی مختص میں سب کو یہاں، 657 00:53:55,620 --> 00:54:01,040 کے طور پر ہم اپنے صف میں مزید اور مزید منتقل، ہم قریب اور ہماری عددی میں قریب ہو رہے ہیں. 658 00:54:01,040 --> 00:54:07,640 یہ صرف اس لئے کہ صف [5] ہوتا ہے، جس میں ہمارے صف سے باہر ایک حیثیت ہے، 659 00:54:07,640 --> 00:54:13,010 بالکل میں جہاں عددی مختص ہوا ہے. 660 00:54:13,010 --> 00:54:16,920 تو وہ نقطہ جہاں ہم نے اسٹیک پر جگہ پر مار رکھا جائے ہوا ہے 661 00:54:16,920 --> 00:54:21,680 جو عددی میں کے لئے مختص کیا گیا تھا، اور ہم اس 0 قائم کرنے کر رہے ہیں. 662 00:54:21,680 --> 00:54:26,160 >> اس کا ہے ہے کہ وہ کس طرح کام کرتا ہے. سوال؟ جی ہاں. 663 00:54:26,160 --> 00:54:30,710 [طالب علم] کوئی بات نہیں. ٹھیک ہے. 664 00:54:30,710 --> 00:54:33,090 [طالب علم] آپ ان قسم کی غلطیوں کے کس طرح سے بچنے کے کر سکتا ہوں؟ 665 00:54:33,090 --> 00:54:41,190 یہ قسم کی غلطیوں کے؟ کیا C آپ کی پروگرامنگ زبان کے طور پر استعمال نہ کریں. 666 00:54:41,190 --> 00:54:45,840 ایک ایسی زبان ہے جو صف کی جانچ پڑتال حد ہے کا استعمال کریں. 667 00:54:45,840 --> 00:54:55,900 جب تک کے طور پر آپ کو ہوشیار ہو، تو آپ صرف اپنے صف کی حد کے ماضی میں جانے سے گریز کرنے کی ضرورت ہے. 668 00:54:55,900 --> 00:54:58,300 [طالب علم] تو یہاں جب ہم نے آپ کے صف کی حد ماضی گئے - 669 00:54:58,300 --> 00:55:01,840 [Bowden] یہ چیزیں کہاں غلط ہو رہا شروع. >> [طالب علم] اوہ، ٹھیک ہے. 670 00:55:01,840 --> 00:55:05,730 جب تک کے طور پر آپ کو آپ کے صف کے لئے مختص میموری کے اندر اندر رہیں، تم ٹھیک ہو. 671 00:55:05,730 --> 00:55:12,400 لیکن C کوئی غلطی چیکنگ کرتا ہے. اگر میں صف کرتے [1000]، یہ صرف خوشی نظر ثانی جو بھی ہو گا - 672 00:55:12,400 --> 00:55:16,500 یہ صف کے آغاز کو جاتا ہے، تو اس کے بعد 1000 کی پوزیشنوں کو جاتا ہے اور یہ سیٹ 0. 673 00:55:16,500 --> 00:55:20,000 یہ کسی بھی چیکنگ کہ اوہ، یہ اس میں 1000 چیزیں اصل میں نہیں ہے نہیں ہے. 674 00:55:20,000 --> 00:55:22,750 1000 طریقہ جو میں تبدیل کر ہونا چاہئے سے باہر ہے، 675 00:55:22,750 --> 00:55:26,940 جبکہ جاوا یا کچھ اور آپ کو صف حد انڈیکس کی باہر کریں گے 676 00:55:26,940 --> 00:55:29,820 یا حد کے استثناء سے باہر فہرست. 677 00:55:29,820 --> 00:55:33,950 یہی وجہ ہے کہ اعلی سطح زبانوں میں سے ایک بہت کچھ ان چیزوں 678 00:55:33,950 --> 00:55:37,340 جہاں اگر آپ صف کی حد سے باہر چلے جاؤ، تم ناکام 679 00:55:37,340 --> 00:55:40,070 تاکہ تم نیچے سے چیزیں تبدیل نہیں کر سکتے 680 00:55:40,070 --> 00:55:42,590 اور پھر چیزیں صرف ایک رعایت حاصل کرنے سے کہیں زیادہ برا جانا 681 00:55:42,590 --> 00:55:44,940 کہہ رہے ہیں کہ آپ نے صف کے آخر سے باہر چلا گیا. 682 00:55:44,940 --> 00:55:50,970 [طالب علم] اور اس طرح ہم نے صرف تبدیل کرنا چاہئے <= صرف <؟ >> [Bowden] جی ہاں. 683 00:55:50,970 --> 00:55:54,800 00:55:59,560 کے بعد sizeof (صف) 20 ہے، لیکن ہم صرف 5 چاہتے ہیں. >> [طالب علم] ٹھیک ہے. 685 00:55:59,560 --> 00:56:04,060 مزید سوال؟ ٹھیک ہے. 686 00:56:04,060 --> 00:56:07,380 >> [طالب علم] میں ایک سوال کے جواب میں ہے. >> جی ہاں. 687 00:56:07,380 --> 00:56:16,440 [طالب علم] اصل صف متغیر کیا ہے؟ 688 00:56:16,440 --> 00:56:20,000 [] Bowden طرح کیا صف ہے؟ 689 00:56:20,000 --> 00:56:24,930 لڑی خود کو ایک علامت ہے. 690 00:56:24,930 --> 00:56:31,490 یہ صرف 20 بائٹس کہ ہم حوالہ رہے ہیں کے آغاز کا پتہ ہے. 691 00:56:31,490 --> 00:56:38,070 اس میں سے تم ایک پوائنٹر کے طور پر لگتا ہے، لیکن کر سکتے ہیں یہ ایک مسلسل پوائنٹر ہے. 692 00:56:38,070 --> 00:56:44,140 جیسے ہی چیزوں کو مرتب کرنے کے لئے، متغیر صف اب موجود نہیں ہے. 693 00:56:44,140 --> 00:56:48,210 [طالب علم] تو صف کے سائز کس طرح پتہ ہے؟ 694 00:56:48,210 --> 00:56:54,130 صف کا سائز اس بلاک کے سائز ہے کہ اس کی علامت سے مراد ہے. 695 00:56:54,130 --> 00:57:01,240 جب میں printf طرح کچھ ("٪ P \ N"، صف) کرو، 696 00:57:01,240 --> 00:57:05,140 چلو اسے چلاتے ہیں. 697 00:57:12,960 --> 00:57:15,530 میں صرف کیا غلط کیا تھا؟ 698 00:57:15,530 --> 00:57:19,220 صف 'صف' کا اعلان کر دیا. 699 00:57:20,820 --> 00:57:23,200 اوہ، یہاں. 700 00:57:23,200 --> 00:57:31,250 بجنا ہوشیار ہے، اور یہ دیکھیں گے کہ میں 5 عناصر کے طور پر صف کا اعلان کر دیا ہے 701 00:57:31,250 --> 00:57:34,540 لیکن میں 1000 کی پوزیشن میں تخکرمن کر رہا ہوں. 702 00:57:34,540 --> 00:57:38,450 یہ ایسا کیونکہ یہ صرف constants ہیں کر سکتے ہیں. 703 00:57:38,450 --> 00:57:43,370 یہ دیکھ رہا ہوں کہ میں صف کی حد سے باہر جا رہا ہوں میں اب تک ہی جا سکتے ہیں. 704 00:57:43,370 --> 00:57:46,880 لیکن جب ہم نے سے پہلے میں غلط نوٹس، 705 00:57:46,880 --> 00:57:51,040 شاید نہیں کتنی اقدار میں وقت لگ سکتا ہے اس بات کا تعین کر سکتے ہیں، 706 00:57:51,040 --> 00:57:55,540 تو اس کا تعین نہیں ہے کہ میں صف کے آخر سے باہر جا رہا تھا سکتا ہے. 707 00:57:55,540 --> 00:57:59,430 یہ صرف ہوشیار ہونے کے بجنا ہے. 708 00:57:59,430 --> 00:58:03,340 >> لیکن اب buggy4 ہے. تو اور کیا میں غلط کر رہا ہوں؟ 709 00:58:03,340 --> 00:58:05,970 لپیٹ لائبریری تقریب 'printf' قرار دیا ہے. 710 00:58:05,970 --> 00:58:14,960 میں # شامل کرنا چاہتے ہیں کے لئے جا رہا ہوں. 711 00:58:14,960 --> 00:58:18,710 ٹھیک ہے. اب buggy4 چل رہا ہے. 712 00:58:18,710 --> 00:58:24,840 کی طرح صف کی قدر طباعت میں یہاں کیا، ایک پوائنٹر کے طور پر پرنٹنگ 713 00:58:24,840 --> 00:58:30,060 پرنٹس کچھ ہے کہ اس طرح لگ رہا ہے - bfb8805c - جس میں کچھ پتہ ہے 714 00:58:30,060 --> 00:58:33,450 اسٹیک ish علاقے میں ہے. 715 00:58:33,450 --> 00:58:41,820 لڑی خود پوائنٹر طرح ہے، لیکن یہ ایک حقیقی پوائنٹر نہیں ہے، 716 00:58:41,820 --> 00:58:45,410 ہم ایک باقاعدہ پوائنٹر سے تبدیل کر سکتے ہیں. 717 00:58:45,410 --> 00:58:54,700 لڑی صرف کچھ مسلسل جاری ہے. میموری کا 20 بلاکس ایڈریس 0xbfb8805c میں شروع ہیں. 718 00:58:54,700 --> 00:59:09,020 اس ایڈریس کے ذریعے تو bfb8805c +20- یا میں -20 اندازہ ہے - 719 00:59:09,020 --> 00:59:17,400 اس صف کے لئے مختص میموری ہے. 720 00:59:17,400 --> 00:59:20,350 صف، متغیر خود کہیں بھی محفوظ نہیں ہے. 721 00:59:20,350 --> 00:59:27,660 جب آپ انتخاب کر رہے ہیں، کمپائلر - اس میں ہاتھ لہر - 722 00:59:27,660 --> 00:59:33,060 لیکن سنکلک جہاں یہ صف ہونا جانتا ہے استعمال کریں گے. 723 00:59:33,060 --> 00:59:36,090 یہ جانتا ہے جہاں کہ صف شروع ہوتی ہے، 724 00:59:36,090 --> 00:59:40,910 اور تو اس offsets کی شرائط میں ہمیشہ چیزوں کو کہ شروع سے ہی کر سکتے ہیں. 725 00:59:40,910 --> 00:59:43,960 یہ ایک متغیر خود صف کی نمائندگی کرنے کی ضرورت نہیں ہے. 726 00:59:43,960 --> 00:59:53,730 لیکن جب میں نے int * P صف = کی طرح کچھ کرتے ہیں، اب پی پوائنٹر جو کہ صف میں اشارہ ہے، 727 00:59:53,730 --> 00:59:57,830 اور اب اسٹیک P اصل میں کوئی وجود نہیں ہے. 728 00:59:57,830 --> 01:00:01,950 میں پی تبدیل کرنے کے لئے آزاد ہوں. P = malloc کر سکتے ہیں. 729 01:00:01,950 --> 01:00:06,500 تو یہ اصل میں صف کی طرف اشارہ کیا، اب یہ ڈھیر پر کسی جگہ اشارہ ہے. 730 01:00:06,500 --> 01:00:09,620 میں صف = malloc نہیں کر سکتے. 731 01:00:09,620 --> 01:00:13,710 اگر بجنا ہوشیار ہے، اس بیٹ سے دور حق کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے متعلق چللاو گا. 732 01:00:17,000 --> 01:00:21,430 اصل میں، میں خوبصورت کو یقین ہے کہ جی سی سی ایسا بھی ہوں. 733 01:00:21,430 --> 01:00:25,010 تو صف قسم int [5] 'assignable نہیں ہے. 734 01:00:25,010 --> 01:00:28,040 تم کچھ ایک صف کی قسم کی وضاحت نہیں کر سکتے 735 01:00:28,040 --> 01:00:30,500 کیونکہ صف صرف ایک مسلسل جاری ہے. 736 01:00:30,500 --> 01:00:34,760 یہ علامت ہے جو حوالہ جات ان 20 بائٹس ہے. میں اسے تبدیل نہیں کر سکتے. 737 01:00:34,760 --> 01:00:37,690 >> [طالب علم] اور جہاں صف کا سائز محفوظ کیا جاتا ہے؟ 738 01:00:37,690 --> 01:00:40,670 [Bowden] یہ کہیں بھی محفوظ نہیں ہے. ایسا لگتا ہے جب یہ انتخاب ہے. 739 01:00:40,670 --> 01:00:46,310 تو جہاں صف کا سائز محفوظ کیا جاتا ہے؟ 740 01:00:46,310 --> 01:00:51,870 آپ کو تقریب ہے کہ صف خود اعلان کیا ہے کے اندر صرف sizeof (صف) کا استعمال کر سکتے ہیں. 741 01:00:51,870 --> 01:01:03,150 تو اگر میں نے کچھ تقریب، FOO کرتے ہیں، اور مجھے کیا کرنا (int صف []) 742 01:01:03,150 --> 01:01:10,450 printf ("٪ D \ N"، sizeof (صف))؛ 743 01:01:10,450 --> 01:01:21,330 اور پھر یہاں ذیل میں FOO (صف) کہتے ہیں؛ 744 01:01:21,330 --> 01:01:24,840 کے اندر اس تقریب میں سب کچھ - چلو اسے چلاتے ہیں. 745 01:01:34,200 --> 01:01:36,840 یہ ہوشیار دوبارہ ہونے کے بجنا ہے. 746 01:01:36,840 --> 01:01:43,890 یہ مجھ سے کہہ رہا ہے کہ صف تقریب پیرامیٹر پر sizeof 747 01:01:43,890 --> 01:01:46,690 'int *' سائز واپس آ جائیں گے. 748 01:01:46,690 --> 01:01:55,150 یہ ایک غلطی ہے اگر یہ نہیں ہے جو میں ہونا ہی چاہتا تھا. 749 01:01:55,150 --> 01:01:58,960 چلو، اصل میں Werror باری. 750 01:02:14,950 --> 01:02:17,590 انتباہ. انتباہ ٹھیک ہیں. 751 01:02:17,590 --> 01:02:19,960 ابھی بھی جب تک مرتب کے طور پر یہ ایک انتباہ ہے. 752 01:02:19,960 --> 01:02:22,910 a.out / 4 پرنٹ کرنے کے لئے کی جا رہی ہے. 753 01:02:22,910 --> 01:02:28,650 انتباہ کیا ہے کہ پیدا کیا گیا تھا کیا غلط ہو گیا ایک واضح اشارہ ہے. 754 01:02:28,650 --> 01:02:34,120 اس int صف sizeof (* int) کو پرنٹ کرنے کے لئے کی جا رہی ہے. 755 01:02:34,120 --> 01:02:39,790 یہاں تک کہ اگر میں یہاں [5] صف ڈال، یہ اب بھی صرف sizeof (* int) کو پرنٹ کرنے کے لئے جا رہے ہیں. 756 01:02:39,790 --> 01:02:47,440 تو جیسے ہی کے طور پر آپ کو ایک تقریب میں اس کے پاس، arrays اور اشارہ کے درمیان فرق 757 01:02:47,440 --> 01:02:49,670 نابود ہے. 758 01:02:49,670 --> 01:02:52,640 یہ ایک صف ہے جو کہ آپ نے اسٹیک اعلان کیا گیا تھا ہے وہ یہ کہ یہ ہے، 759 01:02:52,640 --> 01:02:58,300 لیکن جیسے ہی ہم اس قدر پاس کہ 0xbf وغیرہ، وغیرہ، اس تقریب میں BLAH، 760 01:02:58,300 --> 01:03:03,350 تو اس پوائنٹر اسٹیک پر اس صف پر دکھاتا ہے. 761 01:03:03,350 --> 01:03:08,310 تو اس کا مطلب ہے کہ صرف sizeof تقریب کہ صف قرار دیا گیا میں لاگو ہوتا ہے، 762 01:03:08,310 --> 01:03:11,230 جس کا مطلب ہے کہ تم نے اس تقریب کو جب مرتب کر رہے ہیں، 763 01:03:11,230 --> 01:03:17,330 جب بجنا اس تقریب کے ذریعے جاتا ہے، دیکھتا ہے سرنی 5 سائز کے ایک int صف ہے. 764 01:03:17,330 --> 01:03:20,640 تو یہ sizeof (صف) دیکھتا ہے. ٹھیک ہے، یہ 20 ہے. 765 01:03:20,640 --> 01:03:26,440 یہ اصل میں ہے کہ کس طرح sizeof بنیادی طور پر تقریبا تمام صورتوں کے لئے کام کرتا ہے. 766 01:03:26,440 --> 01:03:31,150 Sizeof ایک تقریب نہیں ہے، یہ ایک آپریٹر ہے. 767 01:03:31,150 --> 01:03:33,570 آپ کو sizeof تقریب کو فون نہیں ہے. 768 01:03:33,570 --> 01:03:38,280 (int) Sizeof، سنکلک کہ 4 ترجمہ جائے گا. 769 01:03:41,480 --> 01:03:43,700 سمجھے؟ ٹھیک ہے. 770 01:03:43,700 --> 01:03:47,520 >> [طالب علم] تو اہم اور FOO میں sizeof (صف) کے درمیان فرق کیا ہے؟ 771 01:03:47,520 --> 01:03:52,840 یہ اس لئے ہے کیونکہ ہم sizeof (صف)، جو قسم int * کہہ رہے ہو، 772 01:03:52,840 --> 01:03:57,120 جبکہ صف یہاں ذیل قسم int * نہیں ہے، یہ ایک int صف ہے. 773 01:03:57,120 --> 01:04:04,540 >> [طالب علم] لہذا، اگر آپ کو [] کے بجائے صف int * صف میں پیرامیٹر تھا 774 01:04:04,540 --> 01:04:09,230 اس کا یہ مطلب ہے کہ آپ اب بھی صف کیونکہ اب یہ پوائنٹر ہے تبدیل کر سکتا ہوں؟ 775 01:04:09,230 --> 01:04:14,250 [Bowden] اس طرح؟ >> [طالب علم] جی ہاں. صف اب آپ کو تقریب کے اندر اندر تبدیل کر سکتا ہوں؟ 776 01:04:14,250 --> 01:04:18,420 [Bowden] آپ دونوں صورتوں میں صف کو تبدیل کر سکتے ہیں. 777 01:04:18,420 --> 01:04:23,130 ان دونوں مقدمات کی میں آپ کا کہنا ہے کہ [4] صف = 0 آزاد ہیں. 778 01:04:23,130 --> 01:04:26,590 [طالب علم] لیکن صف نقطہ آپ کچھ کر سکتے ہیں؟ 779 01:04:26,590 --> 01:04:30,230 [Bowden] اوہ. جی ہاں. دونوں میں سے کسی بھی صورت میں میں سب کچھ - >> [طالب علم] جی ہاں. 780 01:04:30,230 --> 01:04:38,410 [Bowden] صف] [اور ایک int * صف کے درمیان فرق ہے، وہاں کوئی نہیں ہے. 781 01:04:38,410 --> 01:04:42,570 آپ یہاں کچھ کثیرالابعاد سرنی بھی حاصل کر سکتے ہیں 782 01:04:42,570 --> 01:04:47,050 کچھ آسان نحو کے لئے ہے، لیکن یہ اب بھی صرف ایک پوائنٹر ہے. 783 01:04:47,050 --> 01:04:56,400 اس کا مطلب یہ ہے کہ میں صف کرنے کے لئے آزاد ہوں = malloc (sizeof (int))؛ اور اب کسی اور کی طرف اشارہ ہے. 784 01:04:56,400 --> 01:04:59,610 صرف پسند کرتے ہیں لیکن یہ کس طرح ہمیشہ کے لئے اور ہمیشہ کام 785 01:04:59,610 --> 01:05:03,210 اسے بنا کر اس صف کو تبدیل کرنے سے کچھ کی طرف اشارہ 786 01:05:03,210 --> 01:05:07,570 کیا یہ صف تبدیل نہیں یہاں کیونکہ یہ دلیل کی ایک نقل ہے، 787 01:05:07,570 --> 01:05:10,780 اس سے اس دلیل کو پوائنٹر نہیں ہے. 788 01:05:10,780 --> 01:05:16,070 اور اصل میں، صرف اشارہ ہے کہ یہ بالکل ایسا ہی ہے کے طور پر میں سب کچھ - 789 01:05:16,070 --> 01:05:21,100 ہم نے پہلے سے ہی کیا پرنٹنگ صف پرنٹس کو دیکھا ہے - 790 01:05:21,100 --> 01:05:31,410 کیا ہوا اگر ہم صف کا ایڈریس یا صف کا ایڈریس کا پتہ پرنٹ کریں 791 01:05:31,410 --> 01:05:36,290 ان میں سے کسی کو؟ 792 01:05:41,770 --> 01:05:45,220 چلو، اس ایک کو نظر انداز. 793 01:05:48,140 --> 01:05:51,660 ٹھیک ہے. یہ ٹھیک ہے. اب یہ a.out / چل رہا ہے. 794 01:05:51,660 --> 01:06:00,220 چھپائی کی صف، پھر صف کا پتہ، پرنٹنگ ایک ہی چیز ہیں. 795 01:06:00,220 --> 01:06:02,870 لڑی صرف موجود ہی نہیں ہے. 796 01:06:02,870 --> 01:06:08,190 یہ جانتا ہے کہ جب تم صف چھپائی رہے ہیں، آپ کی علامت ہے کہ ان 20 بائٹس سے مراد چھپائی رہے ہیں. 797 01:06:08,190 --> 01:06:11,940 صف کا پتہ، پرنٹنگ ٹھیک ہے، صف کا کوئی وجود نہیں ہے. 798 01:06:11,940 --> 01:06:17,200 یہ پتہ نہیں ہے، تو یہ صرف ان 20 بائٹس کی ایڈریس پرنٹ. 799 01:06:20,820 --> 01:06:28,150 جیسے ہی آپ نیچے مرتب آپ کے مرتب buggy4 میں پسند / a.out. 800 01:06:28,150 --> 01:06:30,340 صف نابود ہے. 801 01:06:30,340 --> 01:06:33,640 اشارہ موجود ہے. Arrays نہیں کرتے ہیں. 802 01:06:34,300 --> 01:06:38,060 میموری کے بلاکس صف کی نمائندگی اب بھی موجود ہیں، 803 01:06:38,060 --> 01:06:43,270 لیکن متغیر صف اور اس قسم کی متغیر کا کوئی وجود نہیں ہے. 804 01:06:46,260 --> 01:06:50,270 وہ arrays اور اشارہ کے درمیان بنیادی اختلافات کی طرح ہیں 805 01:06:50,270 --> 01:06:55,590 جیسے ہی آپ کے تقریب کو کالیں، اس سے کوئی فرق نہیں ہے. 806 01:06:55,590 --> 01:07:00,460 لیکن اندر تقریب کہ صف خود کا اعلان کیا ہے، sizeof مختلف طریقے سے کام کرتا ہے 807 01:07:00,460 --> 01:07:05,190 ، کیونکہ آپ بجائے قسم کے سائز کے بلاکس کا سائز چھپائی رہے ہیں 808 01:07:05,190 --> 01:07:08,950 اور آپ اسے تبدیل نہیں کر سکتے ہیں کیونکہ اس میں ایک نشانی ہے. 809 01:07:08,950 --> 01:07:14,370 بات کی بات اور پتہ طباعت ایک ہی بات پرنٹ. 810 01:07:14,370 --> 01:07:18,480 اور یہ بہت زیادہ ہے. 811 01:07:18,480 --> 01:07:20,820 [طالب علم] کہ تم ایک اور بار کہہ سکتے ہیں؟ 812 01:07:21,170 --> 01:07:24,170 میں کچھ یاد ہو سکتا ہے. 813 01:07:24,170 --> 01:07:29,260 سرنی چھپائی کی صف اور ایک ہی بات پتہ پرنٹ، 814 01:07:29,260 --> 01:07:33,180 ، اگر آپ پوائنٹر کے ایڈریس کے مقابلے میں ایک پوائنٹر پرنٹ کریں جبکہ 815 01:07:33,180 --> 01:07:36,010 ایک بات کیا آپ کی طرف اشارہ کرتے ہوئے کر رہے ہیں کا پتہ پرنٹ، 816 01:07:36,010 --> 01:07:40,360 دیگر اسٹیک پر پوائنٹر کا پتہ پرنٹ. 817 01:07:40,360 --> 01:07:47,040 آپ کو ایک پوائنٹر کو تبدیل کر سکتے ہیں، آپ کو ایک صف کی علامت تبدیل نہیں کر سکتے. 818 01:07:47,740 --> 01:07:53,270 اور sizeof پوائنٹر اس پوائنٹر قسم کے سائز کو پرنٹ کرنے کے لئے کی جا رہی ہے. 819 01:07:53,270 --> 01:07:57,470 تو int * P sizeof (P) 4 پرنٹ کرنے کے لئے کی جا رہی ہے، 820 01:07:57,470 --> 01:08:04,110 لیکن int [5] صف پرنٹ sizeof (صف) 20 پرنٹ جا رہا ہے. 821 01:08:04,110 --> 01:08:07,480 [طالب علم] تو int [5] صف 20 پرنٹ کرے گا؟ >> جی ہاں. 822 01:08:07,480 --> 01:08:13,300 یہی وجہ ہے کہ buggy4 کے اندر جب یہ sizeof (صف) کرتے تھے 823 01:08:13,300 --> 01:08:16,660 جو اس میں کر 20 <گیا تھا، نہیں ہے جو ہم چاہتے تھے. 824 01:08:16,660 --> 01:08:20,880 ہم میں 5 <چاہتے ہیں. >> [طالب علم] ٹھیک ہے. 825 01:08:20,880 --> 01:08:25,569 [Bowden] اور پھر جیسے ہی تم افعال میں گزرنے والے شروع، 826 01:08:25,569 --> 01:08:34,340 اگر ہم نے int * P صف =؛ 827 01:08:34,340 --> 01:08:39,779 اس تقریب کے اندر، ہم بالکل اسی طرح سے P اور صف بنیادی طور پر استعمال کر سکتے ہیں، 828 01:08:39,779 --> 01:08:43,710 سوائے sizeof مسئلہ اور تبدیل کرنے کے مسئلہ کے لئے. 829 01:08:43,710 --> 01:08:49,810 لیکن P [0] = 1، [0] صف = 1 کہہ کے طور پر ایک ہی ہے؛ 830 01:08:49,810 --> 01:08:55,600 اور جیسے ہی ہم FOO (صف) کا کہنا ہے کہ؛، یا (P) FOO 831 01:08:55,600 --> 01:08:59,760 FOO تقریب کے اندر، یہ ایک ہی کال میں دو بار ہے. 832 01:08:59,760 --> 01:09:03,350 ان دو فون کے درمیان کوئی فرق نہیں ہے. 833 01:09:07,029 --> 01:09:11,080 >> اچھا ہر کوئی اس پر؟ ٹھیک ہے. 834 01:09:14,620 --> 01:09:17,950 ہمارے پاس 10 منٹ ہیں. 835 01:09:17,950 --> 01:09:28,319 >> ہم اس ہیکر Typer پروگرام کے ذریعے حاصل کرنے کی کوشش کریں گے، 836 01:09:28,319 --> 01:09:32,350 اس ویب سائٹ، جس میں گزشتہ سال یا کچھ باہر آ گیا. 837 01:09:34,149 --> 01:09:41,100 یہ صرف ہونا چاہیئے طرح آپ کو تصادفی ٹائپ اور اسے باہر پرنٹ - 838 01:09:41,100 --> 01:09:46,729 جو بھی فائل کو لوڈ کیا ہے ہوتا ہے جو ایسا لگتا ہے جیسے آپ ٹائپ کر رہے ہیں. 839 01:09:46,729 --> 01:09:52,069 یہ آپریٹنگ سسٹم کوڈ کے کسی قسم کی طرح لگ رہا ہے. 840 01:09:53,760 --> 01:09:56,890 اس کا ہے جو ہم پر عملدرآمد چاہتے ہیں. 841 01:10:08,560 --> 01:10:11,690 آپ کو ایک بائنری نام hacker_typer کارکردگی قابل ہونا چاہئے 842 01:10:11,690 --> 01:10:14,350 جو ایک ایک بحث میں لیتا ہے، فائل "ہیکر کی قسم." 843 01:10:14,350 --> 01:10:16,480 کارکردگی چلانے کی سکرین صاف چاہئے 844 01:10:16,480 --> 01:10:20,850 اور ایوان میں فائل کی طرف سے ہر بار جب صارف ایک اہم پریس تو ایک کردار پرنٹ. 845 01:10:20,850 --> 01:10:24,990 جو کچھ بھی کلید کو دبانے تو دور پھینک دیں اور بجائے سے ایک کردار کی فائل کو پرنٹ کرنا چاہئے 846 01:10:24,990 --> 01:10:27,810 یہ دلیل ہے. 847 01:10:29,880 --> 01:10:34,350 میں تم سے بہت زیادہ بتاو کہ کیا چیزیں ہم جاننے کی ضرورت کے لئے جا رہے ہیں ہیں کریں گے. 848 01:10:34,350 --> 01:10:36,440 لیکن ہم termios لائبریری چیک کرنے کے لیے کرنا چاہتے ہیں. 849 01:10:36,440 --> 01:10:44,840 میں نے اس لائبریری کا استعمال کیا کبھی اپنی پوری زندگی میں، تو یہ بہت ہی کم سے کم مقاصد ہیں. 850 01:10:44,840 --> 01:10:48,610 لیکن یہ لائبریری ہم دور کردار تم نے مارا پھینک کا استعمال کر سکتے ہیں کی جا رہی ہے 851 01:10:48,610 --> 01:10:52,390 جب آپ اندر معیار میں ٹائپ کر رہے ہیں 852 01:10:56,970 --> 01:11:05,840 تو hacker_typer.c، اور ہم # شامل کرنا چاہتے ہیں جا رہے ہیں. 853 01:11:05,840 --> 01:11:12,870 termios کی تلاش کے لئے مرد صفحہ - I'm یہ ٹرمینل OS یا کچھ اندازہ ہے - 854 01:11:12,870 --> 01:11:16,240 مجھے پتہ نہیں کہ یہ کس طرح پڑھنے کے لئے ہے. 855 01:11:16,240 --> 01:11:21,040 کی تلاش میں اس کو ان 2 فائلوں کو شامل کرنے کے لئے کہتے ہیں، تو ہم ایسا کریں گے. 856 01:11:37,620 --> 01:11:46,820 >> پہلی چیز سب سے پہلے، ہم ایک ایک دلیل، جو فائل ہم کھلنا چاہیے ہے میں لینے کے لئے چاہتے ہیں. 857 01:11:46,820 --> 01:11:52,420 تو مجھے کیا کرنا چاہتے ہیں؟ میں دیکھ رہا ہوں میں ایک ایک دلیل ہے کیسے چیک کر سکتا ہوں؟ 858 01:11:52,420 --> 01:11:56,480 [] طالب علم اگر argc یہ برابر ہے. >> [Bowden] جی ہاں. 859 01:11:56,480 --> 01:12:21,250 لہذا اگر (argc = 2) printf ("استعمال:٪ [فائل کھولیں]"). 860 01:12:21,250 --> 01:12:32,750 لہذا اب اگر میں نے ایک دوسری دلیل فراہم کرنے کے بغیر اس چلاتے ہیں - اوہ، میں نئی ​​لائن کی ضرورت ہے - 861 01:12:32,750 --> 01:12:36,240 تمہیں دیکھ کر یہ استعمال کا کہنا ہے کہ ہوں گے: / hacker_typer. 862 01:12:36,240 --> 01:12:39,770 اور پھر دوسری دلیل فائل میں چاہتا ہوں کہ کھولنے کی ہونا چاہئے. 863 01:12:58,430 --> 01:13:01,260 اب میں کیا کروں؟ 864 01:13:01,260 --> 01:13:08,490 میں نے اس فائل سے پڑھنے کے لئے چاہتے ہیں. میں ایک فائل سے کس طرح پڑھ سکتا ہوں؟ 865 01:13:08,490 --> 01:13:11,920 [طالب علم] آپ پہلے کھولتے. >> جی ہاں. 866 01:13:11,920 --> 01:13:15,010 تو fopen. کیا fopen طرح لگتی ہے؟ 867 01:13:15,010 --> 01:13:22,980 [طالب علم] فائل کا نام ہے. >> [Bowden] فائل کا نام argv [1] کے طور پر کی جا رہی ہے. 868 01:13:22,980 --> 01:13:26,110 [طالب علم] اور پھر کیا تم اس کے ساتھ کیا کرنا چاہتے ہیں، تو - >> [Bowden] جی ہاں. 869 01:13:26,110 --> 01:13:28,740 لہذا اگر آپ کو یاد نہیں، آپ کو آدمی fopen کرنا ہو سکتا ہے، 870 01:13:28,740 --> 01:13:32,960 جہاں یہ const چار * راستہ ہے جہاں راستہ FILENAME ہے ہونے جا رہا ہے، 871 01:13:32,960 --> 01:13:34,970 const حروف * موڈ. 872 01:13:34,970 --> 01:13:38,660 اگر آپ کو یاد نہیں کیا موڈ ہے ہوا، تو آپ موڈ کے لئے دیکھ سکتے ہیں. 873 01:13:38,660 --> 01:13:44,660 انسان کے صفحات کے اندر، سلیش کردار ہے جو تم چیزوں کو تلاش کرنے کے لئے استعمال کر سکتے ہیں. 874 01:13:44,660 --> 01:13:49,790 تو I / موڈ کے لئے تلاش کرنے کے موڈ ٹائپ کریں. 875 01:13:49,790 --> 01:13:57,130 (ن) اور این جو آپ تلاش کے میچوں کے ذریعے سائیکل کرنے کے لئے استعمال کر سکتے ہیں. 876 01:13:57,130 --> 01:13:59,800 یہاں یہ ایک تار دلیل موڈ پوائنٹس کا کہنا ہے کہ 877 01:13:59,800 --> 01:14:01,930 مندرجہ ذیل انداز میں سے ایک کے ساتھ شروع. 878 01:14:01,930 --> 01:14:06,480 ر تو پڑھنے کے لیے اوپن ٹیکسٹ فائل ہے. اس کا ہے جو ہم کرنا چاہتے ہیں. 879 01:14:08,930 --> 01:14:13,210 کے لئے پڑھنے، اور میں اس کی دکان پر چاہتے ہیں. 880 01:14:13,210 --> 01:14:18,720 بات ایک فائل * پر کی جا رہی ہے. اب میں کیا کرنا چاہتے ہیں؟ 881 01:14:18,720 --> 01:14:21,200 مجھے ایک دوسری دو. 882 01:14:28,140 --> 01:14:30,430 ٹھیک ہے. اب میں کیا کرنا چاہتے ہیں؟ 883 01:14:30,430 --> 01:14:32,940 [طالب علم] اگر وہ نل ہے چیک کریں. >> [Bowden] جی ہاں. 884 01:14:32,940 --> 01:14:38,690 کسی بھی وقت آپ کو ایک فائل کو کھولنے، اس بات کا یقین کر لیں کہ آپ کامیابی کے ساتھ اسے کھولنے کے قابل ہو. 885 01:14:58,930 --> 01:15:10,460 >> اب میں کہ termios چیزیں کرنا چاہتا ہوں جہاں میں نے سب سے پہلے اپنے موجودہ ترتیبات کا مطالعہ کرنا چاہتے ہیں 886 01:15:10,460 --> 01:15:14,050 اور کچھ میں ان کو بچانے کے لئے، اور پھر میں اپنی ترتیبات کو تبدیل کرنا چاہتے ہیں 887 01:15:14,050 --> 01:15:19,420 کسی بھی کردار میں ٹائپ کرنے کے لئے پھینک، 888 01:15:19,420 --> 01:15:22,520 اور اس کے بعد میں ان کی ترتیبات کو اپ ڈیٹ کرنا چاہتے ہیں. 889 01:15:22,520 --> 01:15:27,250 اور پھر پروگرام کے آخر میں، مجھے میرے اصل ترتیبات پر واپس تبدیل کرنا چاہتے ہیں. 890 01:15:27,250 --> 01:15:32,080 تو struct قسم termios کی جا ہے، اور میں ان میں سے دو کرنا چاہتے ہیں جا رہا ہوں. 891 01:15:32,080 --> 01:15:35,600 سب سے پہلے میری current_settings جا رہا ہے، 892 01:15:35,600 --> 01:15:42,010 اور پھر وہ میرے hacker_settings ہونے جا رہے ہیں. 893 01:15:42,010 --> 01:15:48,070 سب سے پہلے، میں اپنے موجودہ ترتیبات کو محفوظ کرنا چاہتے ہیں کے لئے جا رہا ہوں، 894 01:15:48,070 --> 01:15:53,790 تو میں hacker_settings کو اپ ڈیٹ کرنا چاہتے ہیں کے لئے جا رہا ہوں، 895 01:15:53,790 --> 01:16:01,570 اور پھر اپنے پروگرام کے آخر میں، میں موجودہ ترتیبات پر واپس آجائے کرنا چاہتے ہیں. 896 01:16:01,570 --> 01:16:08,660 تو موجودہ ترتیبات محفوظ، اس طرح سے کام کرتا ہے، ہم نے انسان termios. 897 01:16:08,660 --> 01:16:15,810 ہم دیکھتے ہیں کہ ہم اس int tcsetattr، tcgetattr int ہے. 898 01:16:15,810 --> 01:16:22,960 میں اس پوائنٹر کی طرف سے ایک termios struct میں گزرتے ہیں. 899 01:16:22,960 --> 01:16:30,640 طرح یہ نظر آئے گا ہے - I've پہلے ہی بھلا کیا تقریب میں بلایا گیا تھا. 900 01:16:30,640 --> 01:16:34,930 اور اسے کاپی اور پیسٹ کریں. 901 01:16:39,150 --> 01:16:45,500 تو tcgetattr، تو میں struct میں منتقل کرنے کی کہ میں میں معلومات بچا رہا ہوں کرنا چاہتے ہیں، 902 01:16:45,500 --> 01:16:49,650 جو current_settings ہونے جا رہا ہے، 903 01:16:49,650 --> 01:16:59,120 اور پہلی دلیل چیز میں کی صفات کو بچانے کے لئے کرنا چاہتے ہیں کے لئے فائل ویورنک ہے. 904 01:16:59,120 --> 01:17:04,360 فائل ویورنک کیا ہے کسی بھی وقت آپ کو ایک فائل کو کھولنے کی طرح ہے، ایک فائل ویورنک ملتا ہے. 905 01:17:04,360 --> 01:17:14,560 جب fopen میں argv [1]، یہ ایک فائل ویورنک ہے جس میں آپ کو حوالہ کر رہے ہیں ہو جاتا ہے 906 01:17:14,560 --> 01:17:16,730 جب بھی آپ کو یا اس سے لکھنے پڑھنے کرنا چاہتے ہیں. 907 01:17:16,730 --> 01:17:19,220 یہ فائل ویورنک میں یہاں استعمال کرنے کے لئے کرنا چاہتے ہیں نہیں ہے. 908 01:17:19,220 --> 01:17:21,940 تین فائل descriptors آپ ڈیفالٹ کی طرف سے ہیں، 909 01:17:21,940 --> 01:17:24,310 جو معیار میں ہیں، معیاری باہر، اور معیاری غلطی. 910 01:17:24,310 --> 01:17:29,960 ڈیفالٹ کی طرف سے، مجھے لگتا ہے کہ یہ ہے معیاری 0، معیار سے 1 ہے، اور معیاری نقص 2 ہے. 911 01:17:29,960 --> 01:17:33,980 تو کیا میں کی ترتیبات کو تبدیل کرنے کے لئے کرنا چاہتے ہیں؟ 912 01:17:33,980 --> 01:17:37,370 میں جب بھی میں نے ایک کردار کو مارا کی ترتیبات کو تبدیل کرنے کے لئے چاہتے ہیں، 913 01:17:37,370 --> 01:17:41,590 میں اسے پردے پر پرنٹ کرنے کے بجائے اس کردار کو دور پھینک کرنا چاہتے ہیں. 914 01:17:41,590 --> 01:17:45,960 کیا ندی - میں معیاری باہر، یا معیاری غلطی معیار - 915 01:17:45,960 --> 01:17:52,050 چیزوں کا جواب جب میں کی بورڈ میں ٹائپ کریں؟ >> [طالب علم] >> جی ہاں اندر سٹینڈرڈ 916 01:17:52,050 --> 01:17:56,450 تو میں 0 یا میں stdin کر سکتے ہیں کر سکتے ہیں. 917 01:17:56,450 --> 01:17:59,380 میں اندر معیار کی current_settings ہو رہا ہے 918 01:17:59,380 --> 01:18:01,720 >> اب میں ان کی ترتیبات کو اپ ڈیٹ کرنا چاہتے ہیں، 919 01:18:01,720 --> 01:18:07,200 تو سب سے پہلے میں کیا hacker_settings میرے current_settings میں کاپی کریں گے. 920 01:18:07,200 --> 01:18:10,430 اور کس طرح structs کام ہے یہ صرف کاپی گا. 921 01:18:10,430 --> 01:18:14,510 یہ تمام شعبوں نقل کرتا ہے، آپ کے طور پر توقع کریں گے. 922 01:18:14,510 --> 01:18:17,410 >> اب میں شعبوں میں سے کچھ کو اپ ڈیٹ کرنا چاہتے ہیں. 923 01:18:17,410 --> 01:18:21,670 کی تلاش میں termios میں، آپ اس کی ایک بہت کے ذریعے پڑھنے کے لئے ہوگا 924 01:18:21,670 --> 01:18:24,110 صرف یہ دیکھنا ہے کہ آپ کو تلاش کرنے کے لئے چاہتے ہیں، 925 01:18:24,110 --> 01:18:28,210 لیکن پرچم آپ کو تلاش کرنے کے لئے چاہتے ہیں کے لئے جا رہے ہیں گونج ہیں، 926 01:18:28,210 --> 01:18:33,110 بازگشت ان پٹ حروف بازگشت. 927 01:18:33,110 --> 01:18:37,710 سب سے پہلے میں قائم کرنے کے لئے کرنا چاہتے ہیں - I've پہلے ہی بھول موضوعات ہیں. 928 01:18:45,040 --> 01:18:47,900 یہ وہی ہے جو struct کی طرح لگتا ہے. 929 01:18:47,900 --> 01:18:51,060 تو ان پٹ طریقوں میں لگتا ہے کہ ہم کو تبدیل کرنا چاہتے ہیں. 930 01:18:51,060 --> 01:18:54,210 ہم حل تلاش کریں گے اس بات کا یقین کر لیں کہ ہے جو ہم کو تبدیل کرنا چاہتے ہیں بنانے کے لئے کریں گے. 931 01:19:04,060 --> 01:19:12,610 ہم lflag ان تمام کے ذریعے تلاش کرنے کی ضرورت کو روکنے کے لئے کے لئے تبدیل کرنا چاہتے ہیں. 932 01:19:12,610 --> 01:19:14,670 ہم مقامی طریقوں کو تبدیل کرنا چاہتے ہیں. 933 01:19:14,670 --> 01:19:17,710 آپ کو اس پوری بات کے ذریعے پڑھنے کی سمجھ میں جہاں ہر چیز سے تعلق رکھتا ہے 934 01:19:17,710 --> 01:19:19,320 کہ ہم کو تبدیل کرنا چاہتے ہیں. 935 01:19:19,320 --> 01:19:24,120 لیکن یہ مقامی طریقوں جہاں ہم کہ اس کو تبدیل کرنا چاہتے کرنے جا رہے ہیں کے اندر ہے. 936 01:19:27,080 --> 01:19:33,110 تو hacker_settings.cc_lmode ہے جو یہ کہتے ہیں. 937 01:19:39,630 --> 01:19:43,020 c_lflag. 938 01:19:49,060 --> 01:19:52,280 اس کا ہے جہاں ہم bitwise آپریٹرز میں ملتا ہے. 939 01:19:52,280 --> 01:19:54,860 ہم وقت سے باہر کی طرح ہیں، لیکن ہم یہ اصلی جلد کے ذریعے جائیں گے. 940 01:19:54,860 --> 01:19:56,600 یہی وہ جگہ ہے جہاں ہم bitwise آپریٹرز میں، 941 01:19:56,600 --> 01:19:59,950 جہاں مجھے لگتا ہے کہ میں ایک وقت بہت پہلے کہا ہے، کہ جب بھی آپ کو پرچم سے نمٹنے شروع 942 01:19:59,950 --> 01:20:03,370 آپ bitwise آپریٹر بہت استعمال کرتے ہوئے جا رہے ہیں. 943 01:20:03,370 --> 01:20:08,240 پرچم میں ہر سا رویہ کسی قسم کے مساوی ہے. 944 01:20:08,240 --> 01:20:14,090 تو یہاں یہ پرچم دونوں مختلف چیزیں ہیں، جہاں ان میں سے سب کچھ مختلف مطلب کا ایک گروپ ہے. 945 01:20:14,090 --> 01:20:18,690 لیکن جو میں کرنا چاہتا ہوں بٹ جس سے گونج کے مساوی ہے باری. 946 01:20:18,690 --> 01:20:25,440 تو باری ہے کہ کیا میں ایسا کرتے ہیں & = ¬ ایکو. 947 01:20:25,440 --> 01:20:30,110 اصل میں، مجھے لگتا ہے کہ یہ tECHO یا کچھ اور کی طرح ہے. میں نے ابھی دوبارہ چیک کرنے کے لیے جا رہا ہوں. 948 01:20:30,110 --> 01:20:34,050 میں اسے termios کر سکتے ہیں. یہ صرف بازگشت ہے. 949 01:20:34,050 --> 01:20:38,440 ایکو کسی ایک سا ہونے جا رہا ہے. 950 01:20:38,440 --> 01:20:44,230 ¬ ایکو مطلب تمام بٹس 1 مقرر کر دیا جاتا ہے، جس کا مطلب ہے کہ تمام جھنڈوں سچ کی تیاری میں ہیں کی جا رہی ہے 951 01:20:44,230 --> 01:20:47,140 سوائے ایکو تھوڑا کے لئے. 952 01:20:47,140 --> 01:20:53,830 اس کے ساتھ اپنے مقامی پرچم کو ختم کر، یہ پرچم اس وقت صحیح مقرر کر دیا جاتا ہے کا مطلب ہے کہ 953 01:20:53,830 --> 01:20:56,520 اب بھی درست رکھا جائے گا مقرر کیا ہے. 954 01:20:56,520 --> 01:21:03,240 اگر میرا ایکو پرچم حقیقی کے لئے مقرر کیا گیا ہے، تو یہ ضروری ایکو پرچم پر جھوٹے پر مقرر کیا گیا ہے. 955 01:21:03,240 --> 01:21:07,170 تو کوڈ کے اس لائن ایکو پرچم دیتا ہے. 956 01:21:07,170 --> 01:21:16,270 کوڈ کے دیگر لائنز میں انہیں وقت کے مفاد میں اور پھر کاپی اس کی وضاحت کریں گے. 957 01:21:27,810 --> 01:21:30,180 حل میں انہوں نے 0 نے کہا کہ. 958 01:21:30,180 --> 01:21:33,880 یہ شاید بہتر stdin پر واضح طور پر کہنا. 959 01:21:33,880 --> 01:21:42,100 >> نوٹس ہے کہ میں نے بھی ایکو کر رہا ہوں | ICANON یہاں. 960 01:21:42,100 --> 01:21:46,650 ICANON الگ کچھ، جو وہیت موڈ کا مطلب ہے کہ مراد ہے. 961 01:21:46,650 --> 01:21:50,280 کیا وہیت موڈ کا مطلب ہوتا ہے، جب آپ باہر ٹائپ کمانڈ لائن ہیں 962 01:21:50,280 --> 01:21:54,670 میں معیار کچھ بھی عملدرآمد نہیں ہے جب تک کہ آپ newline مارا. 963 01:21:54,670 --> 01:21:58,230 تو جب آپ GetString کرتے ہیں، آپ کا ایک گروپ چیزیں ٹائپ کریں، تو آپ newline مارا. 964 01:21:58,230 --> 01:22:00,590 اس کا ہے جب اس کے اندر معیار کو بھیجا ہے 965 01:22:00,590 --> 01:22:02,680 وہ پہلے سے طے شدہ ہے. 966 01:22:02,680 --> 01:22:05,830 جب میں نے وہیت موڈ کو بند ہو، اب ہر ایک کردار کو دبانے 967 01:22:05,830 --> 01:22:10,910 ہے جو کارروائی ہے، جو عام طور پر برے قسم کا ہے کیونکہ یہ ان چیزوں پر عملدرآمد کرنے میں سست ہے ہو جاتا ہے، 968 01:22:10,910 --> 01:22:14,330 یہی وجہ ہے کہ یہ اچھی بات ہے کہ اسے پورے لائنوں میں بفر. 969 01:22:14,330 --> 01:22:16,810 لیکن میں ہر کردار پر کارروائی کرنا چاہتے ہیں 970 01:22:16,810 --> 01:22:18,810 کیونکہ میں نے اسے انتظار کے لئے آپ کے وزٹرز کا ریکارڈ رکھا newline کو نشانہ بنانے کے لئے نہیں کرنا چاہتا 971 01:22:18,810 --> 01:22:21,280 اس سے پہلے کہ تمام حروف پر عملدرآمد میں ٹائپ ہے. 972 01:22:21,280 --> 01:22:24,760 اس سے وہیت موڈ بدل جاتا ہے. 973 01:22:24,760 --> 01:22:31,320 یہ چیزیں صرف کا مطلب ہے کہ جب یہ اصل میں حروف پر عملدرآمد ہے. 974 01:22:31,320 --> 01:22:35,830 اس کا مطلب یہ ہے کہ انہیں فوری طور پر کاروائی، جیسے ہی میں نے ان کو ٹائپ کر رہا ہوں، ان پر عملدرآمد ہے. 975 01:22:35,830 --> 01:22:42,510 اور یہ تقریب جو معیار کے لئے میری ترتیبات میں اپ ڈیٹ کرنے ہے ہے، 976 01:22:42,510 --> 01:22:45,480 اور TCSA کا مطلب یہ ابھی کرتے ہیں. 977 01:22:45,480 --> 01:22:50,310 دوسرے اختیارات انتظار جب تک سب کچھ جو ندی پر ہیں پر کارروائی کر رہے ہیں. 978 01:22:50,310 --> 01:22:52,030 یہ واقعی کوئی فرق نہیں پڑتا. 979 01:22:52,030 --> 01:22:56,920 بس ابھی میری ترتیبات جو کچھ بھی اس وقت hacker_typer_settings میں ہے کو تبدیل کرنے. 980 01:22:56,920 --> 01:23:02,210 مجھے لگتا ہے کہ میں نے اسے hacker_settings کہا جاتا ہے، اس لئے کہ تبدیل. 981 01:23:09,610 --> 01:23:13,500 سب کچھ hacker_settings پر تبدیل کریں. 982 01:23:13,500 --> 01:23:16,870 >> اب ہم ہمارے پروگرام کے آخر میں آپ کو واپس کرنا چاہتے ہیں جا رہے ہیں 983 01:23:16,870 --> 01:23:20,210 کیا وقت normal_settings کے اندر ہے، 984 01:23:20,210 --> 01:23:26,560 جس میں صرف normal_settings اور عمومی طرح دیکھنے جا رہا ہے. 985 01:23:26,560 --> 01:23:30,650 نوٹس میں اصل میں حاصل کرنے کے بعد میرے normal_settings میں سے کسی ایک تبدیل کر دیا ہے نہیں ہے. 986 01:23:30,650 --> 01:23:34,520 تو پھر انہیں واپس پر تبدیل کرنے کے لئے، میں نے ان سے آخر میں گزرتے ہیں. 987 01:23:34,520 --> 01:23:38,390 یہ اپ ڈیٹ تھا. ٹھیک ہے. 988 01:23:38,390 --> 01:23:43,900 >> اب اندر یہاں سے میں وقت کے مفاد میں کوڈ صرف سمجھا دونگا. 989 01:23:43,900 --> 01:23:46,350 یہ اتنا کوڈ نہیں ہے. 990 01:23:50,770 --> 01:24:03,750 ہم دیکھتے ہیں ہم سے ایک کردار کی فائل کو پڑھنے کے. ہم اس F ملاقات کی. 991 01:24:03,750 --> 01:24:07,850 اب تم وہ آدمی fgetc لیکن کر سکتے ہیں کس طرح fgetc کام پر جا رہا ہے 992 01:24:07,850 --> 01:24:11,910 ہے، صرف یہ کردار ہے کہ آپ نے ابھی یا مسل اختتام پڑھ واپس جا رہا ہے 993 01:24:11,910 --> 01:24:15,680 جو کہ فائل کے آخر یا کوئی غلطی ہو رہا مساوی ہے. 994 01:24:15,680 --> 01:24:19,900 ہم looping، فائل سے ایک کردار کو پڑھنے کے لئے جاری کر رہے ہیں، 995 01:24:19,900 --> 01:24:22,420 جب تک ہم حروف سے باہر چلانے کے ہے پڑھ. 996 01:24:22,420 --> 01:24:26,650 اور جب ہم وہی کر رہے ہیں، ہم اندر معیار سے ایک ایک کردار پر انتظار کریں 997 01:24:26,650 --> 01:24:29,090 ہر وقت آپ کو کمانڈ لائن میں کچھ ٹائپ کریں، 998 01:24:29,090 --> 01:24:32,820 معیار سے ایک کردار میں اندر پڑھ رہا ہے 999 01:24:32,820 --> 01:24:38,330 پھر putchar صرف چار ہم فائل سے معیار باہر پڑھا یہاں ڈال دیا جا رہا ہے. 1000 01:24:38,330 --> 01:24:42,890 تم وہی آدمی putchar لیکن کر سکتے ہیں یہ صرف معیار پر ڈال ہے، یہ کردار چھپائی ہے. 1001 01:24:42,890 --> 01:24:51,600 اسی خیال، تم نے ابھی بھی printf ("٪ C"، C) کر سکتے ہیں. 1002 01:24:53,330 --> 01:24:56,670 یہ ہمارے کام کا بڑا حصہ کیا جا رہا ہے. 1003 01:24:56,670 --> 01:25:00,300 >> آخری چیز جو ہم کرنا چاہتے ہیں کے لئے جا رہے ہیں ہے کہ صرف ہماری فائل میں fclose. 1004 01:25:00,300 --> 01:25:03,310 ہے کہ اگر آپ نہیں fclose، ایک میموری لیک ہے. 1005 01:25:03,310 --> 01:25:06,680 ہم فائل ہم اصل میں کھولا fclose کرنا چاہتے ہیں، اور مجھے لگتا ہے کہ یہ ہے. 1006 01:25:06,680 --> 01:25:13,810 اگر ہم کہ، میں نے پہلے ہی مسائل ہیں. 1007 01:25:13,810 --> 01:25:17,260 چلو دیکھتے ہیں. 1008 01:25:17,260 --> 01:25:19,960 کیا اس کے بارے میں شکایت کیا ہے؟ 1009 01:25:19,960 --> 01:25:30,220 قسم 'struct _IO_FILE *' متوقع 'int' لیکن دلیل ہے. 1010 01:25:36,850 --> 01:25:39,370 ہم دیکھتے ہیں اگر وہ کام کریں گے. 1011 01:25:45,210 --> 01:25:53,540 صرف C99 میں اس کی اجازت ہے. Augh. ٹھیک ہے، hacker_typer ہے. 1012 01:25:53,540 --> 01:25:57,760 اب ہم زیادہ مفید وضاحت ملتا ہے. 1013 01:25:57,760 --> 01:25:59,900 تو اگھوشیت شناخت کنندہ 'normal_settings' کا استعمال کریں. 1014 01:25:59,900 --> 01:26:04,170 میں اسے normal_settings فون نہیں کیا. میں اسے current_settings سے ملاقات کی. 1015 01:26:04,170 --> 01:26:12,090 تو یہ سب تبدیل ہے. 1016 01:26:17,920 --> 01:26:21,710 اب دلیل گزر. 1017 01:26:26,290 --> 01:26:29,500 اب میں اس 0 کر دونگا. 1018 01:26:29,500 --> 01:26:36,720 ٹھیک ہے. / hacker_typer cp.c.. 1019 01:26:36,720 --> 01:26:39,590 میں نے شروع میں سکرین واضح نہیں تھا. 1020 01:26:39,590 --> 01:26:42,960 لیکن تم نے گزشتہ مسئلہ سیٹ پر واپس دیکھو یہ دیکھنے کے لئے کہ کس طرح آپ کی سکرین صاف کرنے کے لئے کر سکتے ہیں. 1021 01:26:42,960 --> 01:26:45,160 یہ صرف کچھ حروف چھپائی 1022 01:26:45,160 --> 01:26:47,210 جبکہ یہ کر رہی ہے کہ میں کیا کرنا چاہتے ہیں. 1023 01:26:47,210 --> 01:26:48,900 ٹھیک ہے. 1024 01:26:48,900 --> 01:26:55,280 اور یہ کیوں 0 stdin کے بجائے کی ضرورت کے بارے میں سوچ 1025 01:26:55,280 --> 01:27:00,560 جس # 0 چاہیے وضاحت 1026 01:27:00,560 --> 01:27:03,890 کہ اس شکایت ہے - 1027 01:27:13,150 --> 01:27:19,360 جب میں نے کہا کہ فائل descriptors لیکن پھر تم نے بھی آپ کی فائل * اس سے پہلے، 1028 01:27:19,360 --> 01:27:23,210 ایک فائل ویورنک صرف ایک واحد عددی ہے، 1029 01:27:23,210 --> 01:27:26,970 جبکہ ایک فائل * چیزیں ایک مکمل جھوبڈ اس کے ساتھ منسلک ہے. 1030 01:27:26,970 --> 01:27:30,380 اسی سبب سے ہم بجائے stdin 0 کہنے کی ضرورت 1031 01:27:30,380 --> 01:27:37,480 یہ ہے کہ stdin ایک فائل * جو بات یہ ہے کہ فائل 0 ویورنک حوالہ کر رہا ہے کی طرف اشارہ ہے. 1032 01:27:37,480 --> 01:27:45,070 تو بھی یہاں جب میں نے fopen کرتے (argv [1]، میں ایک فائل * حاصل واپس آ گیا ہوں. 1033 01:27:45,070 --> 01:27:51,180 لیکن اس فائل * میں کہیں اس فائل کے لئے فائل ویورنک اسی بات یہ ہے. 1034 01:27:51,180 --> 01:27:57,430 اگر آپ کھلے کے لئے مرد صفحہ نظر آئے گا، تو میں لگتا ہے کہ آپ کو 3 شخص کھلا کرنا ہوگا - نہیں - 1035 01:27:57,430 --> 01:27:59,380 2 شخص کھلی - جی ہاں. 1036 01:27:59,380 --> 01:28:06,250 اگر آپ کو کھلی کے لئے صفحہ پر نظر، کھلی ایک نچلے درجے fopen کی طرح ہے، 1037 01:28:06,250 --> 01:28:09,350 اور یہ اصل فائل ویورنک واپس آ گیا ہے. 1038 01:28:09,350 --> 01:28:12,050 fopen اوپن کے سب سے اوپر پر سامان کا ایک گروپ ہے، 1039 01:28:12,050 --> 01:28:17,640 واپس لوٹنے صرف یہ ہے کہ فائل ویورنک ایک پوری فائل * پوائنٹر واپس کرنے کے بجائے جو 1040 01:28:17,640 --> 01:28:20,590 اندر جو ہماری چھوٹی فائل ویورنک ہے. 1041 01:28:20,590 --> 01:28:25,020 فائل * بات سے مراد میں تو معیاری 1042 01:28:25,020 --> 01:28:29,120 جبکہ 0 بذات خود فائل ویورنک معیار ہے. 1043 01:28:29,120 --> 01:28:32,160 >> سوال؟ 1044 01:28:32,160 --> 01:28:35,930 [ہنسی] اس کے ذریعے دھماکے سے اڑا دیا. 1045 01:28:35,930 --> 01:28:39,140 ٹھیک ہے. ہم کیا کر رہے ہیں. [ہنسی] 1046 01:28:39,140 --> 01:28:42,000 >> [CS50.TV]