[Powered by Google Translate] [5 سیکشن - مزید آرام دہ اور پرسکون]
[روب Bowden - ہارورڈ یونیورسٹی]
یہ [CS50 ہے. CS50.TV] -
>> کی طرح میں اپنے ای میل میں کہا ہے کہ، وہاں چیزیں جو آپ استعمال کر سکتے ہیں کے ایک بہت ہیں
اصل مسئلہ سیٹ کرنا آلات سے دوسرے.
ہم تجویز ہے کہ آپ اس آلے میں صرف اس وجہ سے تو ہم آپ کو زیادہ آسانی سے مدد کر سکتے ہیں
اور ہم جانتے ہیں کہ کس طرح سب کچھ کرنے کے لئے کام ہو رہا ہے.
لیکن جہاں آپ کام کرنے اگر، کا کہنا ہے کہ کر سکتے ہیں میں سے ایک مثال کے طور پر، آپ کو رسائی حاصل ہے نہیں ہے
ایک آلے یا آپ سائنس سینٹر کے تہھانے میں کام کرنا چاہتے ہیں -
جو اصل میں وہ آلات بھی ہے -
اگر آپ کہیں بھی کام کرنے کے لئے کرنا چاہتے ہیں.
ایک مثال ہے تم نے دیکھا / SSH کے بارے میں سنا ہے؟
SSH صرف اسے کچھ کرنے سے مربوط طرح بنیادی طور پر ہے.
اصل میں، اب میں آلات میں SSHed رہا ہوں.
میں آلات میں براہ راست کبھی نہیں کام کرتے ہیں.
یہاں آلے ہے، اور اگر آپ یہاں دیکھو، تم اس IP ایڈریس کو دیکھنے کے.
آلات میں ہی میں نے کبھی نہیں کام؛
میں نے ہمیشہ ایک iTerm2 ونڈو ونڈو / ٹرمینل آ.
آپ کہ IP ایڈریس، jharvard@192.168.129.128 SSH SSH کر سکتے ہیں.
میں یہ تعداد بہت آسانی سے یاد ہے کیونکہ یہ اس طرح ایک اچھا نمونہ ہے.
لیکن اس کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے میرا پاس ورڈ پوچھتے ہیں، اور اب میں آلات میں ہوں گے.
بنیادی طور پر، اس وقت، اگر آپ کو آلات خود کے اندر کھولا ٹرمینل
اس انٹرفیس، تاہم آپ اسے استعمال کریں گے، بالکل ایک ہی ہے
انٹرفیس کے طور پر میں یہاں استعمال کر رہا ہوں لیکن اب تم SSHed رہے ہیں.
تم آلے پر SSH نہیں ہے.
دوسری جگہ کرنے کے لئے آپ کو SSH سکتا ہے کی ایک مثال ہے، میں خوبصورت اس بات کا یقین کر لیں کہ آپ ڈیفالٹ کے ذریعہ ہوں -
اوہ. بڑا.
تم سب FAS سرور پر پہلے سے طے شدہ FAS اکاؤنٹس کی طرف سے ہونا چاہئے.
میرے لئے، میں SSH rbowden@nice.fas.harvard.edu گی.
یہ کہ تم پہلی بار پوچھنا جا رہا ہے، اور آپ ایسا کہتے ہیں.
اپنا پاس ورڈ صرف میرے FAS پاس ورڈ بننے جا رہا ہے.
اور تو اب، میں اچھا سرور پر SSHed رہا ہوں اور میں کچھ بھی میں یہاں کر سکتے ہیں.
کلاس آپ کو 124 کی طرح لے سکتا ہے کے ایک بہت، آپ یہاں چیزیں اپ لوڈ کرنے جا رہے ہیں
اصل میں آپ کا مسئلہ سیٹ جمع کرائیں.
لیکن اس کا کہنا ہے کہ آپ کو آپ کے آلے تک رسائی کی ضرورت نہیں ہے.
تو پھر تم کام کرتے ہیں، یہاں پر کی طرح کہیں گے کر سکتے ہیں -
یہ صرف ہمارے سوالات کے سیکشن ہے.
یہ آپ سے پوچھتا ہوں آلے میں اس کی کیا کریں گے.
اس کے بجائے میں اسے سرور پر صرف کر دونگا.
کہ میں ان زپ کرنے جا رہا ہوں.
مسئلہ ہو گا کہ آپ gedit طرح کچھ کا استعمال کرتے ہوئے کرنے کے لئے استعمال کرتے رہے ہیں کی جا رہی ہے
یا آلے ​​کے جو اندر ہے.
تم جا FAS سرور پر کرنے کی ضرورت نہیں رہے ہیں.
یہ سب صرف اس متن انٹرفیس جا رہے ہیں.
تو آپ یا تو ایک ٹیکسٹ ایڈیٹر ہے کہ وہ کرتے ہیں جاننے کے لئے کوشش کر سکتے ہیں.
وہ نینو ہے.
نینو عام طور پر بہت استعمال کرنا آسان ہے ہے.
آپ اپنے تیر کا استعمال کر سکتے ہیں اور عام طور پر ٹائپ کر سکتے ہیں.
تو یہ مشکل نہیں ہے.
اگر آپ کو واقعی پسند ہیں حاصل کرنے کے لئے کرنا چاہتے ہیں تو آپ Emacs استعمال کر سکتے ہیں،
جو میں نے شاید کیونکہ میں بھی نہیں ہے کہ کس طرح Emacs قریب معلوم نہیں کرنا چاہیے کھول دیا ہے.
کنٹرول X، کنٹرول C؟ جی ہاں.
یا آپ کو طاقت ہے، جس کا ہے جو میں استعمال کرنے کے لئے استعمال کر سکتے ہیں.
اور اس طرح وہ اپنے اختیارات ہیں.
اگر تم ایسا نہیں کرنا چاہتے ہیں، آپ کو، بھی اگر آپ پر نظر کر سکتے ہیں manual.cs50.net -
اوہ.
ایک پی سی پر آپ پٹین SSH استعمال کرتے ہوئے کر سکتے ہیں،
جو آپ کو علیحدہ علیحدہ ڈاؤن لوڈ کرنے کی ضرورت کے لئے جا رہے ہیں.
میک پر، آپ صرف پہلے سے طے شدہ استعمال ٹرمینل کی طرف سے یا آپ کر سکتے ہیں iTerm2 ڈاؤن لوڈ، اتارنا،
جو ایک اچھی پسند ہیں ٹرمینل کی طرح ہے.
اگر آپ manual.cs50.net آپ نوٹ پیڈ میں ایک لنک نظر آئے گا + +،
جس کا ہے جو آپ کو ایک پی سی پر استعمال کر سکتے ہیں.
اس کی اجازت دیتا ہے ہے نوٹ پیڈ سے آپ SFTP + +، جو کہ بنیادی طور پر SSH ہے.
یہ کیا ہے، تم کیا کروگے ہے آپ کی فائلوں کو مقامی طور پر ترمیم کریں،
اور اس کے بعد جب بھی آپ ان کو بچانے کے لئے چاہتے ہیں، یہ nice.fas بچا لے گا،
تم نے انہیں کہاں چلا سکتے ہیں.
اور ایک میک پر برابر TextWrangler جا رہا ہے.
تو اس کی مدد سے آپ ایک ہی بات کرتے ہیں.
اس کی مدد سے آپ کو فائلوں کو مقامی طور پر میں ترمیم کریں اور nice.fas کرنے کے لئے انہیں بچانے کے،
تم نے انہیں کہاں چلا سکتے ہیں.
لہذا اگر تم نے کبھی ایک آلے کے بغیر پھنس گئے ہیں، آپ کے پاس یہ اختیارات ہیں
آپ کا مسئلہ سیٹ اب بھی کرتے ہیں.
ایک مسئلہ کہ تم جا CS50 لائبریری نہیں کر رہے ہیں کی جا رہی ہے
کی وجہ سے پہلے سے طے شدہ کی طرف سے nice.fas نہیں ہے.
آپ CS50 لائبریری یا تو ڈاؤن لوڈ، اتارنا کر سکتے ہیں -
مجھے نہیں لگتا ہے کہ میں اس وقت اس کی ضرورت ہے.
آپ CS50 لائبریری یا تو اور یہ nice.fas کو کاپی ڈاؤن لوڈ، اتارنا کر سکتے ہیں،
یا مجھے لگتا ہے کہ اس وقت ہم اس کا استعمال نہیں کرتے اب ویسے بھی.
یا اگر ہم ایسا کرتے ہیں، آپ کو وقت کے لئے کیا جا رہا ہے یہ کر سکتے ہیں کے ساتھ کی جگہ
ویسے بھی CS50 لائبریری میں کام کے نفاذ.
تو یہ ہے کہ پابندیوں کے اتنا نہیں ہونا چاہئے.
اور یہ ہے.
>> میں آلات پر واپس اب جاؤ گے، ہم آلے میں سب کچھ کروں گا.
کی تلاش میں سوالات کے ہمارے حصے میں، شروع میں، جیسا کہ میں نے کہا کہ اپنے ای میل میں،
ہم مختصر ایک آپ کو دیکھنا چاہئے تھا کے بارے میں بات کرنے کے لئے ہے.
ہم منتقل کیا جا رہا اور عمومی پائپ اور ان تین سوال ہیں.
>> جو ندی کی طرح کام کرتا ہے ڈیفالٹ کے ذریعہ printf لکھ سکتا ہوں؟
تو ندی. ندی کیا ہے؟
بنیادی طور پر ایک ندی کی طرح یہ صرف کچھ ہے -
1s اور 0s کے ذریعے یہ بھی نہیں ہے.
ندی یہ یہاں کے بارے میں پوچھ رہا ہے معیاری باہر ہے.
اور معیاری باہر ایک ندی ہے آپ اسے جب لکھنا
اس کی سکرین پر ظاہر ہوتا ہے.
معیاری، ندی کی طرف سے، اس کا مطلب ہے کہ آپ نے ابھی 1s اور اس 0s لکھنے،
اور معیاری باہر کے دوسرے سرے صرف اس سلسلہ سے پڑھتا ہے.
یہ صرف 1s اور 0s کی ایک تار ہے.
آپ اسٹریمز میں لکھنے یا آپ اسٹریمز میں سے پڑھ سکتے ہیں کر سکتے ہیں
اصل میں جو ندی ہے پر منحصر ہے.
دیگر دو ڈیفالٹ اسٹریمز اور معیاری گمراہی میں معیاری ہیں.
میں معیاری ہے جب بھی آپ GetString کرتے ہیں، یہ آپ کے لئے ان پٹ کے سامان میں انتظار کر رہی ہے.
تو یہ آپ کے لئے انتظار کر رہا ہے، یہ اصل میں میں معیار پر انتظار کر رہی ہے،
جو واقعی ہے جو تمہیں حاصل ہے جب آپ کو کی بورڈ میں ٹائپ.
تم اندر معیار میں ٹائپ کر رہے ہیں
سٹینڈرڈ غلطی بنیادی طور پر معیار باہر کے برابر ہے،
لیکن یہ اس میں ماہر ہے جب آپ کو معیاری کی خرابی کی پرنٹ،
آپ کو صرف اس خرابی کے پیغامات کی پرنٹ کرنا ہے
لہذا آپ کو سکرین طباعت کی باقاعدہ پیغامات کے درمیان فرق کر سکتے ہیں
غلطی چاہے وہ معیار باہر یا معیاری غلطی گئے تھے کے لحاظ سے پیغامات کے مقابلے میں.
بھی فائلیں.
سٹینڈرڈ باہر، میں معیار اور معیاری غلطی صرف خصوصی اسٹریمز ہیں،
لیکن واقعی میں کسی بھی فائل کے جب تم نے ایک فائل کو کھولنے، بائٹس کی ایک ندی بن جاتا ہے
آپ کو اس سلسلے سے ہے جہاں صرف پڑھ سکتے ہیں.
تم بائٹس کی ایک ندی کے طور پر ایک فائل کے سب سے زیادہ حصہ کے لئے، صرف سوچ سکتے ہیں.
تو کیا اسٹریمز میں وہ پہلے سے طے شدہ کی طرف سے کرتے ہیں لکھنے کے لئے ہے؟ سٹینڈرڈ باہر.
>> > اور >> کے درمیان کیا فرق ہے؟
کیا کسی ویڈیو سے پہلے دیکھتے ہو؟ ٹھیک ہے.
> کس طرح آپ کو فائلوں میں ری کی جا رہی ہے،
اور >> فائلوں میں بھی پیداوار پر ری ڈائریکٹ کی جا رہی ہے،
لیکن اس کی بجائے فائل میں شامل ہو رہا ہے.
مثال کے طور پر، دو کا کہنا ہے کہ میں dict یہاں ہو،
اور dict کے اندر صرف چیزیں بلی، بلی، کتا، مچھلی، کتے، ہے.
ایک حکم ہے کہ آپ کمانڈ لائن پر بلی ہے،
جس میں صرف پرنٹ ایک فائل میں کیا ہے جا رہا ہے.
تو جب میں نے کا کہنا ہے کہ بلی dict، بلی، بلی، کتا، مچھلی، کتے، کو پرنٹ کرنے کے لئے جا رہا ہے. اس کا تمام بلی ہے.
اس کا مطلب یہ ہے کہ یہ بلی، بلی، کتا، مچھلی، کتے، باہر معیاری طباعت کی.
اگر میں بجائے ایک فائل پر ری ڈائریکٹ کرنا چاہتے ہیں، میں استعمال کرنے کے لئے> جو بھی فائل ہے ری کر سکتے ہیں.
میں فائل فائل کو فون کریں گے.
تو اب اگر میں LS میں دیکھ، میں نامی ایک نئی فائل فائل ہے گے.
اور اگر میں اسے کھولو، یہ بالکل وہی جو بلی کمانڈ لائن پر ڈال جا رہا ہے.
تو اب اگر میں اس کے پھر سے کرتے ہیں، تو اس فائل میں پیداوار ری جا رہا ہے،
اور میں ایک ہی عین مطابق بات کرنے جا رہا ہوں.
تو تکنیکی طور پر، یہ مکمل طور پر overrode کیا ہم نے.
اور ہم دیکھتے ہیں اگر میں dict تبدیل کر دونگا، میں نے کتے لیا.
اب اگر فائل میں بلی ہم پھر dict، ہم کتے ہٹا کے ساتھ نیا ورژن کے لئے جا رہے ہیں.
تو یہ پوری طرح اس کی جگہ لے لیتا ہے.
اس کے بجائے اگر ہم >> استعمال کرتے ہیں، یہ فائل شامل ہو رہا ہے.
اب، فائل کھولنے، ہم دیکھتے ہیں ہم صرف ایک ہی دو بار طباعت چیز ہے
کیونکہ یہ وہاں ایک بار گیا تھا، اس کے بعد ہم اصل سے منسلک ہے.
تو کہ جو> >> اور کرتے ہیں.
اس کے بارے میں نہیں پوچھا - کیا اگلے ایک سے پوچھو.
>> کہ ہم ایک دوسرے <ہے، جو اگر> معیاری باہر ری ڈائریکٹس ہے،
<معیار کو ری ڈائریکٹ کرنے کے لئے اندر جا رہا ہے
چلو دیکھتے ہیں اگر ہم ایک مثال ہے.
میں ایک حقیقی فوری لکھ سکتے ہیں.
چلو کسی بھی فائل، hello.c لے.
نسبتا براہ راست فائل.
میں صرف ایک تار ہو رہا ہے اور اس کے بعد "ہیلو" جو سٹرنگ میں صرف میں داخل تھا چھپائی.
تو خوش اور پھر / ہیلو.
اب یہ آپ کے وزٹرز کا ریکارڈ رکھا نے فورا ہی کچھ داخل کرنے کی ہے،
جس کا مطلب ہے کہ یہ چیزوں پر انتظار کر رہے اندر معیار میں داخل
درج کریں جو کچھ بھی میں معیار میں اندر ہم صرف یہ کہنا ہیلو، روب جا رہے ہیں!
اس کے بعد یہ خوش باہر معیار کے مطابق چھپائی، روب!
اگر میں / ہیلو. اور اس کے بعد ری
اب آپ کے لئے صرف ایک فائل سے ری ڈائریکٹ کر سکتے ہیں.
تو اگر میں کچھ فائل، TXT میں ڈال دیا، اور میں روب ڈال،
اگر میں نے ہیلو چلانے اور پھر میں فائل TXT ری / ہیلو، خوش کہنا، روب جا رہا ہے! فوری طور پر.
جب یہ پہلی GetString ہو جاتا ہے اور اس میں معیار پر انتظار کر رہا ہے،
میں معیار نہیں رہ گیا ہے میں داخل کرنے کے لئے اعداد و شمار کے لئے کی بورڈ پر انتظار کر رہا ہے.
اس کے بجائے، ہم معیاری فائل TXT سے پڑھنے کے لئے میں ری ڈائریکٹ کیا ہے.
اور تو اس فائل TXT، جس میں صرف لائن روب سے پڑھنے کے لئے جا رہا ہے،
اور پھر یہ خوش روب، پرنٹ کرنے کے لئے جا رہا ہے!
اور اگر میں چاہتا تھا، میں بھی / ہیلو TXT <کر سکتے ہیں.
اور اس کے بعد کہ معیار، پرنٹنگ، جو خوش ہے روب،
میں ہے کہ اس کے اپنے فائل میں ری ڈائریکٹ کر سکتے ہیں.
میں نے فائل صرف ہیلو فون کرتا ہوں - نہیں، میں نہیں، کیونکہ اس کی کارکردگی ہے - txt2.
اب، txt2 / ہیلو. <TXT، جو خوش ہونے جا رہا ہے روب کی پیداوار کی جا رہی ہے!
>> سوال؟
>> ٹھیک ہے. تو پھر ہم یہاں پائپ لائن ہے.
پائپ نئ سمت کے آخری یونٹ ہے.
>> اوہ. مجھے لگتا ہے کہ نئ سمت کا ایک اور یونٹ ہے کی بجائے اگر> آپ 2 کیا>
جو معیاری غلطی منتقل کیا جا رہا ہے.
تو اگر کچھ معیاری کی خرابی کی گئی تھی، اس کے txt2 میں نہیں ملے گا دیا.
لیکن اگر میں 2> نوٹس، تو یہ اب بھی خوش پرنٹنگ، روب! کمانڈ لائن
کیونکہ میں صرف معیاری غلطی منتقل کیا جا رہا ہے کر رہا ہوں، میں معیار منتقل کیا جا رہا ہے نہیں کر رہا ہوں باہر.
معیاری نقص اور معیار باہر مختلف ہیں.
اگر آپ واقعی معیاری غلطی پر لکھنا چاہتے تھے،
تو میں اسے تبدیل stderr پر fprintf سکتا ہے.
تو printf، بطور ڈیفالٹ کی طرف سے، معیار باہر پرنٹ.
اگر میں معیار کی خرابی کی دستی طور پر پرنٹ کرنا چاہتے ہیں، تو میں fprintf استعمال کرنے کے لئے ہے
اور وضاحت جو میں پرنٹ کرنے کے لئے چاہتے ہیں.
اگر بجائے میں fprintf stdout کیا، تو یہ بنیادی طور پر printf کے برابر ہے.
لیکن fprintf معیاری نقص.
تو اب، اگر میں txt2 میں اس ری ہیلو، روب! اب بھی کمانڈ لائن میں پرنٹ ہو رہی ہے
کیونکہ یہ ہو رہا ہے معیاری کی خرابی کی طباعت اور میں صرف معیار باہر منتقل کیا جا رہا ہے کر رہا ہوں.
اگر اب میں معیاری غلطی ری، اب یہ نہیں ملا تھا طباعت اور txt2 خوش، روب جا رہا ہے!
تو اب، آپ کو معیاری کی خرابی کی اصل غلطیوں کو پرنٹ کر سکتے ہیں
اور معیار باہر آپ کے باقاعدہ پیغامات پرنٹ.
اور تو جب آپ کو آپ کے پروگرام چلاتے ہیں، آپ اسے چلانے / 2 کے ساتھ کر سکتے ہیں خوش. اس قسم>
تاکہ آپ کے پروگرام عام طور پر چلانے کے لئے کی جا رہی ہے،
لیکن کسی خرابی کے پیغامات میں کہا گیا ہے کہ آپ کو آپ کے حاصل آپ کی غلطی لاگ ان میں بعد میں چیک کر سکتے ہیں،
غلطیاں تو پھر بعد میں دیکھو اور اپنی غلطیوں فائل میں کسی بھی غلطی ہے کہ ہوا ہو گا.
>> سوال؟
>> گزشتہ ایک پائپ ہے، جس سے آپ کے معیار ایک حکم سے باہر لے جا رہا کرنے کے طور پر سوچ سکتے ہیں ہے
اور اسے اگلے کمانڈ کے معیار بنا رہے ہیں.
ایک مثال کے طور پر یہاں گونج ایک کمانڈ لائن بات ہے
کہ صرف بازگشت جو کچھ بھی میں نے اس کی دلیل کے طور پر ڈال کی جا رہی ہے. میں کی قیمت درج نہیں ڈال کرے گا.
ایکو BLAH، BLAH BLAH BLAH، BLAH، BLAH پرنٹ کرنے کے لئے کی جا رہی ہے.
سے پہلے، جب میں نے کہا کہ میں ایک TXT فائل میں روب ڈال تھا
کیونکہ میں TXT فائلوں کو صرف بجائے ری ڈائریکٹ کر سکتے ہیں، اگر مجھے / روب بازگشت
اور پھر پائپ اس میں / ہیلو، جو بات کے اسی قسم بھی کیا کریں گے.
یہ اس حکم کی پیداوار، گونج روب لے جا رہا ہے،
اور اس کے لئے ان پٹ کے طور پر استعمال کرتے ہوئے / ہیلو.
آپ کو اس کے بارے میں سوچ کے طور پر سب سے پہلے ایک فائل میں گونج روب ری کر سکتے ہیں
اور پھر فائل / ہیلو. کہ میں ان پٹ ہے کہ صرف outputted کیا گیا تھا.
لیکن اس تصویر کے عارضی فائل لیتا ہے.
>> اس پر سوال؟
>> دوسرا سوال یہ شامل کرنے کے لئے کی جا رہی ہے.
کیا پائپ لائن کے آپ نامی names.txt فائل میں منفرد نام کی تعداد کو تلاش کرنے کے لئے استعمال کر سکتے ہیں؟
حکم ہم یہاں استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں میں منفرد، تو uniq، اور پھر ورلڈ کپ ہے.
تم وہی آدمی uniq اصل میں ہے کہ وہ کیا کرتا ہے میں دیکھ سکتے ہیں،
اور یہ صرف ان پٹ سے ملحقہ ملاپ کے لائنز فلٹر جا رہا ہے.
اور انسان ورلڈ کپ newline، لفظ، اور ہر ایک فائل کے لئے بائٹ شمار کو پرنٹ کرنے کے لئے کی جا رہی ہے.
اور آخری ایک طرح کی ہم استعمال کرنا چاہتے ہیں کے لئے جا رہے ہیں ہے،
جو TXT فائل کی لائنز کی چھانٹی کرنے جا رہا ہے.
اگر میں کچھ TXT فائل، names.txt، اور یہ روب، ٹامی، یوسف، ٹامی، یوسف، RJ، روب ہے،
میں یہاں کرنا چاہتے ہیں ہے کہ اس فائل میں منفرد نام کی تعداد کو تلاش کریں.
تو جواب کیا ہونا چاہئے؟ >> [طالب علم] 4. >> جی ہاں.
یہ روب، ٹامی، یوسف کے بعد 4 ہونا چاہئے، RJ اس فائل میں صرف منفرد نام ہے.
اس سلسلے میں پہلے قدم کے طور پر، اگر میں صرف names.txt پر لفظ شمار کرتے ہیں
اس نے مجھے سب کچھ بتا رہا ہے.
یہ دراصل پرنٹنگ ہے - چلو دیکھتے ہیں، انسان ورلڈ کپ - newlines، الفاظ، اور بائٹ شمار.
اگر میں لائنوں کے بارے میں صرف دیکھ بھال، تو میں names.txt ورلڈ کپ L کر سکتے ہیں.
تو کہ مرحلہ نمبر 1 ہے.
لیکن میں ورلڈ کپ L-names.txt نہیں کرنا چاہتے کیونکہ names.txt صرف تمام ناموں پر مشتمل ہے،
اور میں کسی بھی غیر منفرد ہیں فلٹر کرنا چاہتے ہیں.
تو اگر میں uniq names.txt کرتے ہیں کہ مجھے بہت نہیں ہے وہ دو جو میں چاہتا ہوں
کیونکہ نقل ناموں اب بھی وہاں ہیں.
ایسا کیوں ہے؟ uniq کر کیوں جو میں چاہتا ہوں نہیں ہے؟
[طالب علم] نقول نہیں ہیں [اشراوی] >> جی ہاں.
uniq کے لئے آدمی کا صفحہ یاد فلٹر ملحقہ ملاپ لائنوں کا کہنا ہے کہ.
ان سے ملحق نہیں ہیں، تو اس نے ان کو فلٹر نہیں کرے گا.
اگر میں نے ان سے پہلے ترتیب، ترتیب دیں names.txt تمام نقل لائنوں کو ایک ساتھ ڈال کی جا رہی ہے.
تو اب طرح names.txt ہے.
uniq | میں uniq ہے، جو ان پٹ کے طور پر استعمال کرنا چاہتے ہیں کے لئے جا رہا ہوں.
وہ مجھے یوسف، RJ، روب، ٹومی دیتا ہے،
میں ہے کہ ورلڈ کپ L-ان پٹ کے طور پر استعمال کرنا چاہتے ہیں،
جو آپ کے وزٹرز کا ریکارڈ رکھا 4 دینے جا رہا ہے.
کی طرح یہ یہاں کا کہنا ہے کہ، آپ کو کیا پائپ لائن کا استعمال کر سکتا ہے؟
آپ کو حکم دیتا ہے کا ایک سلسلہ کا استعمال کرتے ہوئے کی طرح بہت سی چیزیں کر سکتے ہیں
آپ کو ایک ہی حکم سے جہاں اگلے حکم پر ان پٹ کے طور پر پیداوار کا استعمال کرتے ہیں.
آپ کو بہت سی چیزوں کو ہوشیار چیزوں میں سے ایک بہت کچھ کر سکتے ہیں.
>> سوال؟
ٹھیک ہے.
پائپ اور نئ سمت کے لئے ہے.
>> اب ہم اصل سامان، کوڈنگ سامان پر جانا.
اس PDF کے اندر، آپ کو اس حکم کو نظر آئے گا،
اور آپ کو آپ کے آلے میں اس حکم پر چلانا چاہتے ہیں کریں گے.
wget صرف انٹرنیٹ سے کچھ حاصل کرنے کے لئے حکم ہے، بنیادی طور پر،
تو wget اور یہ یو آر ایل ہے.
اگر آپ کو آپ کے براؤزر میں اس یو آر ایل پر گئے تھے، وہ اس فائل کو ڈاؤن لوڈ، اتارنا گے.
میں صرف اس پر کلک کیا ہے، تو یہ میرے لئے فائل ڈاؤن لوڈ.
لیکن ٹرمینل کے اندر اس بات کا wget لکھنے
ہے صرف یہ آپ کے ٹرمینل میں داخل کرنے کے لئے ڈاؤن لوڈ، اتارنا جا رہے ہیں.
میں section5.zip ہے، اور آپ section5.zip ان زپ کرنا چاہیں گے،
جو آپ کو ایک فولڈر میں کہا جاتا section5 دینے جا رہا ہے،
جو فائلوں آج ہم اس کے اندر استعمال کر جا رہے ہیں سب ہو رہا ہے.
جیسا کہ ان پروگراموں کی فائل کے نام تجویز ہے، وہ تھوڑا سا چھوٹی گاڑی ہو،
تو آپ کا مشن باہر کیوں gdb کا استعمال کرتے ہوئے اعداد و شمار ہے.
کیا سب انہیں ڈاؤن لوڈ / جانتے کہ کس طرح انہیں ڈاؤن لوڈ
ان آلات میں؟ ٹھیک ہے.
>> ./buggy1 چل رہا ہے، یہ انقطاع غلطی بنیادی پھینک دیا کہیں گے،
جو کسی بھی وقت آپ segfault ایک سکتے ہو، یہ ایک بری بات ہے.
کن حالات کے تحت آپ segfault ایک حاصل کرتے ہیں؟
[طالب علم] شہوت انگیز null پوائنٹر محولہ لقب ضبطی. >> جی ہاں. تو یہ ایک مثال ہے.
محولہ لقب ضبطی شہوت انگیز null پوائنٹر آپ segfault ایک حاصل کرنے کے لئے جا رہے ہیں.
کیا مطلب ہے segfault ہے آپ میموری کو چھو رہے ہیں، آپ کو چھو نہیں کیا جانا چاہئے.
تو محولہ لقب ضبطی شہوت انگیز null پوائنٹر 0 ایڈریس چھونے ہے،
اور بنیادی طور پر، تمام کمپیوٹر آج کل کا کہنا ہے کہ ایڈریس 0 میموری آپ کو چھو نہیں کیا جانا چاہئے ہے.
تو یہی وجہ ہے کہ اتارنا null segfault میں پوائنٹر نتائج محولہ لقب ضبطی.
جب آپ ایک پوائنٹر نہیں ابتدا ہو، تو یہ ردی کی ٹوکری کی قدر ہے،
اور اسی طرح جب آپ dereference کی کوشش کرتے ہیں، آپ کو تمام امکانات میں میموری کو چھو رہے ہیں
جو کہیں کے وسط میں ہے.
اگر آپ کو خوش اور ردی کی ٹوکری کی قیمت حاصل کرنے کے لئے ہو
اسٹیک یا کچھ اور کہیں اشارہ ہوا
تو جب آپ dereference کہ پوائنٹر جو تم نہیں initialized ہے،
کچھ غلط نہیں ہو گا.
لیکن اگر اس کی طرف اشارہ ہے، اسٹیک اور ڈھیر کے درمیان کہیں کا کہنا ہے کہ،
یا یہ صرف کہیں ہے جو آپ کے پروگرام کی طرف سے کیا گیا ہے ابھی تک نہیں استعمال کیا جاتا ہے کی طرف اشارہ کرتے ہوئے،
تو آپ میموری کو چھو رہے ہیں آپ کو چھو نہیں کیا جانا چاہئے اور تم segfault.
جب آپ کو ایک پنراورتی تقریب لکھیں اور اس میں بھی کئی بار recurses
اور آپ کے اسٹیک چیزوں میں بہت بڑے اور اسٹیک ٹکرا اگنے
جو اس کے ساتھ نہیں ہونا چاہئے colliding، آپ کو میموری کو چھو رہے ہیں، آپ کو چھو نہیں کیا جانا چاہئے،
تم اتنے segfault.
اسی segfault ایک ہے.
>> یہ بھی اسی وجہ سے ہے کہ اگر آپ کی طرح ایک تار ہے -
پچھلے پروگرام واپس جانے دو.
میں hello.c ہوں صرف کچھ کرنے جا رہا ہے.
چار * = "دنیا خوش!"؛
، اگر میں * کی = یا کچھ کی [0] = 'X' کا استعمال کرتے ہیں
لہذا ہیلو، / ہیلو، ہے. segfault کیوں؟
یہ کیوں segfault؟
آپ کو کیا ہو توقع کریں گے؟
اگر میں printf کیا ("٪ s کو \ N"، S)، کیا آپ کو پرنٹ توقع کریں گے؟
[طالب علم] X ہیلو. >> جی ہاں.
مسئلہ یہ ہے کہ جب آپ اس طرح ایک تار کا اعلان،
پوائنٹر اسٹیک پر جانے کے لئے ہو رہا ہے ہے،
اور جو کا اشارہ کر رہا ہے اس سٹرنگ ہے جو میموری صرف پڑھنے میں موجود ہے.
تو، تم نام، میموری، صرف پڑھنے کے خیال ہو جانا چاہئے
کہ، اگر میموری صرف پڑھنے میں کیا ہے، آپ اس بات کو تبدیل کرنے کی کوشش کریں
تم سے کچھ آپ کو میموری کے ساتھ نہیں کرنا چاہئے کر رہے ہیں اور تم segfault.
یہ اصل میں چار کے * اور چار کے [] کے درمیان ایک بڑا فرق ہے.
لہذا کے چار، []، اب اس جملے کو اسٹیک پر ڈال دیا جا رہا ہے
اور اسٹیک صرف پڑھنے نہیں ہے، جس کا مطلب یہ ہے کہ یہ بالکل ٹھیک کام کرنا چاہئے.
اور اس سے فرق پڑتا ہے.
یاد رکھیں کہ میں جب چار کرتے ہیں * کے = "ہیلو دنیا!"، S خود اسٹیک پر ہے
لیکن کہیں اور کے پوائنٹس، اور یہ کہ کسی اور صرف پڑھنے ہوتا ہے.
لیکن چار کے] [صرف اسٹیک کچھ ہے.
تو وہ segfault ایک ہو رہا کی ایک اور مثال ہے.
>> ہم نے دیکھا کہ ./buggy1 کے نتیجے segfault میں ہے.
اصول میں آپ buggy1.c میں نظر نہیں فوری طور پر کرنا چاہئے.
اس کے بجائے، ہم gdb کے ذریعے اس کو دیکھو گے.
، کہ جب تم میں سے کسی ایک کو آپ انقطاع غلطی (کور پھینک دیا) حاصل نوٹس
آپ کو یہاں اس لئے بلایا بنیادی پر اس فائل کو حاصل ہے.
اگر ہم LS L-ہم دیکھیں گے کہ بنیادی عام طور پر ایک بہت بڑی فائل ہے.
یہ فائل کی بائٹس کی تعداد ہے، تو ایسا لگتا ہے جیسے یہ کلو بائٹ 250 کچھ.
اس کی وجہ یہ ہے کہ بنیادی ڈمپ اصل میں ہے
ہے جب آپ پروگرام کے گر کر تباہ، آپ کے پروگرام کی میموری کی حالت
صرف اس فائل میں کاپی اور چسپاں ہو جاتا ہے.
یہ اس فائل میں پھینک دیا جاتا ہے.
جبکہ چل رہا تھا، اس پروگرام کے ارد گرد 250 کلو بائٹ کی میموری استعمال ہوا،
اور وہ ہے جو اس فائل میں پھینک دیا گیا تھا.
اب آپ اس فائل کو دیکھو، اگر ہم gdb buggy1 بنیادی کر سکتے ہیں.
ہم buggy1 gdb، اور یہ کہ صرف gdb باقاعدگی سے شروع ہو جائے گا کر سکتے ہیں،
اس کی ان پٹ فائل کے طور پر buggy1 کا استعمال کرتے ہوئے.
لیکن اگر آپ gdb buggy1 بنیادی کرتے ہیں، تو اس خاص طور پر gdb شروع ہو رہا ہے
اس بنیادی فائل میں دیکھ کر.
اور تم buggy1 مطلب gdb کہہ رہی جانتا ہے کہ وہ بنیادی فائل buggy1 پروگرام سے آتا ہے.
تو gdb buggy1 کور فوری طور پر ہمارے لانے کی جا رہی ہے
جہاں پروگرام ختم ہوا.
ہم یہاں پروگرام 11 سگنل، انقطاع غلطی کے ساتھ ختم.
ہم اسمبلی، جو شاید بہت مدد گار نہیں ہے کی ایک لائن دیکھنے کے لئے ہو.
لیکن اگر آپ کو بیٹی یا backtrace ٹائپ کریں، یہ تقریب ہو رہا ہے
جو ہمیں ہماری موجودہ اسٹیک کے فریموں کی فہرست فراہم کرتا ہے.
تو backtrace. ایسا لگتا ہے جیسا کہ ہم نے صرف دو اسٹیک فریم ہے.
سب سے پہلے ہمارے اہم اسٹیک فریم ہے،
اور دوسرا اس تقریب میں ہے کہ ہم میں ہوا کے لئے اسٹیک فریم ہے،
جو لگتا ہے کہ ہم صرف اسمبلی کا کوڈ ہے.
تو ہمارے مرکزی تقریب میں واپس جانے
اور کہ ہم 1 فریم کر سکتے ہیں، اور مجھے لگتا ہے کہ ہم بھی کر سکتے ہیں،
لیکن میں تقریبا نیچے کبھی نہیں - یا. جی ہاں.
اوپر اور نیچے. کیا تم لاتا ہے ایک اسٹیک فریم، آپ نیچے لاتا ہے ایک اسٹیک فریم.
کہ میں کبھی نہیں کرنے کے لئے استعمال کرتے ہیں.
میں صرف خاص طور پر 1 فریم، جو 1 لیبل لگا فریم کا کہنا ہے کہ.
1 فریم اہم اسٹیک فریم میں ہم لانے کی جا رہی ہے،
اور یہ یہیں کوڈ کے مطابق ہم ہو کا کہنا ہے کہ.
اگر ہم کوڈ کا ایک جوڑے کی لائنز چاہتے تھے، ہم فہرست کہہ سکتے ہیں،
اور یہ کہ ہم سب کو اس کے ارد گرد کوڈ کی لائنیں دینے جا رہا ہے.
لائن ہم segfaulted 6 تھی:
اگر (strcmp ("CS50 پتھروں"، argv [1]) == 0).
اگر یہ ابھی تک واضح نہیں ہے، تو آپ اسے یہاں سے براہ راست کیوں یہ سوچ segfaulted حاصل کر سکتے ہیں.
لیکن ہم نے اسے مزید ایک قدم لے اور کہتے ہیں، کر سکتے ہیں "کیوں [1] argv segfault؟"
چلو پرنٹ argv [1]، اور 0x0، جو اتارنا null پوائنٹر ہے کی طرح لگتا ہے.
ہم CS50 پتھروں اور شہوت انگیز null strcmping کر رہے ہیں، اور اسی طرح جو segfault جا رہا ہے.
اور کیوں ہے argv [1]، شہوت انگیز null؟
[طالب علم] کیونکہ ہم اسے نہیں دے نے کوئی کمانڈ لائن کے دلائل.
جی ہاں. ہم اسے نہیں دے نے کوئی کمانڈ لائن کے دلائل.
تو ./buggy1 صرف argv [0] ./buggy1 ہو جا رہا ہے.
یہ ایک argv [1] کی ضرورت نہیں ہے، تو جو segfault جا رہا ہے.
لیکن اگر اس کے بجائے، میں صرف CS50 کرتے ہیں، کا کہنا ہے کہ آپ کو ایک D حاصل کرنے کے لئے جا رہا ہے
اس لیے کہ وہ ہے جو اسے کرنا چاہئے.
buggy1.c کو دیکھ کر، اسے پرنٹ کرنا ہے "تم D ملتا ہے" -
اگر argv [1] "CS50 پتھر نہیں ہے،" تم ایک D "، اور" تم نے ایک ملتا ہے! "
تو اگر ہم ایک چاہتے ہیں، ہم اس سچ کے طور پر آپس میں موازنہ کرنے کی ضرورت ہے،
جس کا مطلب ہے کہ یہ 0 کا موازنہ.
تو argv [1] "CS50 پتھر" کی ضرورت ہے.
اگر آپ کے پاس ہے کہ کمانڈ لائن پر کرنا چاہتے ہیں، آپ کو \ خلا سے بچنے کے لئے استعمال کرنے کی ضرورت ہے.
تو CS50 \ پتھروں اور آپ کو ایک ملتا ہے!
اگر آپ الٹا سلیش نہیں ہے، یہ کیوں نہیں کام کرتا ہے؟
[طالب علم] یہ دو مختلف دلائل ہے. >> جی ہاں.
Argv [1] CS50 ہو جا رہا ہے، اور argv [2] پتھروں جا رہا ہے. ٹھیک ہے.
>> اب ./buggy2 پھر segfault جا رہا ہے.
اس کے بنیادی فائل کے ساتھ کھولنے کے بجائے، ہم صرف buggy2 براہ راست کھولتا ہوں،
buggy2 gdb ہے.
اب اگر ہم صرف ہمارے پروگرام کو چلانے کے، تو اس کا کہنا ہے کہ پروگرام سگنل SIGSEGV حاصل کرنے پر ہو رہا ہے،
جو سگنل segfault، اور یہ وہ جگہ ہے جہاں اسے ہونا ہی ہوا.
کی تلاش میں ہمارے backtrace میں، ہم دیکھتے ہیں کہ ہم تقریب oh_no میں تھے،
جو تقریب ڈنکی، جو تقریب binky کی طرف سے کہا گیا تھا کی طرف سے کہا گیا تھا،
جس میں مرکزی کی طرف سے بلایا گیا تھا.
ہم دلائل بھی ان افعال کو دیکھ سکتے ہیں.
ڈنکی اور binky دلیل 1 تھا.
اگر ہم نے تقریب oh_no فہرست میں، ہم دیکھتے ہیں کہ oh_no صرف چار *** S نل = کر رہا ہے؛
* کی = "بوم"؛
کہ ناکام کیوں ہے؟
[طالب علم] آپ شہوت انگیز null پوائنٹر dereference نہیں کر سکتے ہیں؟ >> جی ہاں.
یہ صرف کہہ رہے ہو کے نل ہے ہے، اس بات سے قطع نظر اگر وہ ایک چار ** ہوتا ہے،
جو کہ آپ کس طرح اس کی تشریح پر منحصر ہے، یہ ایک تار پر ایک پوائنٹر پوائنٹر ہو سکتا ہے
یا ڈور کی ایک صف ہے.
کے نل ہے، تو * شہوت انگیز null پوائنٹر محولہ لقب ضبطی ہے،
اور اسی طرح یہ کریش ہو رہا ہے.
یہ تیز ترین طریقوں آپ ممکنہ segfault کر سکتے ہیں میں سے ایک ہے.
یہ صرف ایک، شہوت انگیز null پوائنٹر اعلان کر رہا ہے اور فوری طور پر segfaulting.
یہی oh_no کر رہی ہے.
اگر ہم نے ایک فریم جاتے ہیں، تو ہم نے تقریب کہ oh_no بلایا میں حاصل کرنے کے لئے جا رہے ہیں.
میں اسے نیچے کرنے کی ضرورت ہے.
اگر آپ کو ایک حکم میں داخل نہیں ہے اور آپ صرف درج کریں پھر مارا،
یہ گزشتہ حکم ہے کہ آپ بھاگ اعادہ کروں گا.
ہم 1 فریم میں ہیں.
اس فریم کی فہرست، ہم دیکھتے ہیں یہاں ہمارا کام ہے.
آپ کی فہرست پھر مارا، یا آپ کو 20 کی فہرست کر سکتے ہیں کر سکتے ہیں اور اس کی فہرست گا.
تقریب ڈنکی کا کہنا ہے کہ اگر میں 1 ہے، تو oh_no تقریب میں جانا،
اور slinky تقریب میں جانا ہے.
اور ہم جانتے ہیں کہ 1 ہے کیونکہ ہم کو یہاں دیکھ کر ہو
کہ ڈنکی 1 دلیل کے ساتھ بلایا گیا تھا.
یا آپ بس میں کر سکتے ہیں پرنٹ اور یہ کہنے میں 1 ہے.
ہم ڈنکی میں ہیں، اور اگر ہم نے کسی دوسرے فریم جاؤ، ہم جانتے ہیں کہ ہم binky میں ختم ہو جائے گا.
اوپر. اب ہم binky میں ہیں.
سے پہلے نصف آپ کے وزٹرز کا ریکارڈ رکھا کاٹ سے فہرست - اس جشن کی فہرست -
اسے بند کرنا شروع کر دیا کے طور پر اگر میں 0 ہے، تو ہم اس oh_no کو فون کرنے جا رہے ہیں، اور ڈنکی کو فون کریں.
ہم جانتے ہیں کہ میں 1 سال کے تھے، تو اس ڈنکی ملاقات کی.
اور اب ہم نے اہم واپس آ گئے ہیں، اور اہم int میں = رانڈ () 3٪ جا رہا ہے؛
یہ صرف آپ کو ایک بے ترتیب تعداد میں ہے کہ یا تو 0، 1، یا 2 دینے جا رہا ہے.
یہ اس تعداد کے ساتھ binky کو فون کرنے جا رہا ہے، اور یہ 0 واپس آ جائیں گے.
کی تلاش میں اس کو،
صرف پروگرام کے ذریعے اسے فوری طور پر چلانے کے بغیر چلنے دستی طور پر،
جس سے آپ اہم میں ایک بریک پوائنٹ قائم کرے گا، اس کا مطلب ہے کہ جب ہم پروگرام چلائیں
آپ کے پروگرام تک چلتا ہے جب تک یہ ایک بریک پوائنٹ مار دیتی ہے.
پروگرام چلا رہا تو اسے چلاتے ہیں، اور اس کے بعد یہ اہم تقریب مارا اور چلنا روک دیں گے.
اب ہم نے اہم اندر ہو، اور قدم یا اگلے ہمیں کوڈ کی اگلی لائن میں لانے کی جا رہی ہے.
آپ کو قدم یا آئندہ کیا کر سکتے ہیں.
اگلے مار، اب میں کیا گیا ہے رانڈ () 3 فیصد ہے، تو ہم میں کی قدر کو پرنٹ کر سکتے ہیں مقرر کر دیا،
یہ کہنا اور 1 ہے.
اب یہ اس کی بات کہ ہم اگلے یا قدم کا استعمال کرتے ہیں.
مجھے لگتا ہے کہ یہ گزشتہ ایک میں بات کی، لیکن ہم اگلے استعمال کرنے کے لئے چاہتے ہیں.
جو اگر ہم قدم کا استعمال کرتے ہیں، ہم تقریب میں قدم، اصل بات کو دیکھو کا مطلب ہے کہ
جو binky کے اندر کیا ہو رہا ہے.
اگر ہم اگلے کا استعمال کرتے ہیں، تو اس کا مطلب ہے کہ ختم تقریب جانا
اور صرف ہمارے مرکزی تقریب میں کوڈ کی اگلی لائن پر جانا.
یہیں اس لائن پر، میں جہاں اس نے کہا کہ رانڈ () 3٪؛
اگر میں قدم کیا، یہ رانڈ کے نفاذ میں جانے
اور وہاں کیا ہو رہا ہے کی طرف دیکھو، اور میں رانڈ تقریب کے ذریعے قدم سکتا ہے.
لیکن میں رانڈ تقریب کے بارے میں پرواہ نہیں کرتے.
میں صرف بنیادی کوڈ کی اگلی لائن پر جانا چاہتے ہو، تو میں اگلے کا استعمال کرتے ہیں.
لیکن اب میں binky تقریب کے بارے میں خیال کرتے ہیں، تو میں اس میں قدم کرنا چاہتے ہیں.
اب میں binky میں ہوں.
کوڈ کی پہلی لائن کا کہنا ہے کہ اگر (0 ==)، میں ایک قدم لے جا رہا ہے،
ہم دیکھتے ہیں ہم ڈنکی میں ختم.
اگر ہم فہرست چیزیں، ہم دیکھتے ہیں کہ اس کی جانچ پڑتال میں = 0 ہے.
0 کے برابر نہیں ہے، تو یہ کسی اور کی حالت گئے،
جس میں ڈنکی () کو فون کرنے جا رہا ہے.
تم الجھن میں ہو سکتی ہے.
اگر آپ کو ان لائنوں میں صرف براہ راست دیکھو، آپ کے خیال میں، ہو سکتا ہے اگر (0 ==)،
ٹھیک ہے، تو میں ایک قدم لیا اور اب میں ڈنکی (میں) میں ہوں،
آپ کو لگتا ہے کہ اس کا یہ مطلب لازما میں 0 = یا کچھ اور ہو سکتا ہے.
نہیں، یہ صرف کا مطلب ہے کہ وہ جانتا ہے کہ براہ راست لائن ڈنکی () چپکی کر سکتے ہیں.
کیونکہ میں 0 نہیں ہے، اگلے قدم کسی اور کو ختم کرنے کے لئے نہیں ہے.
پھر ایک لائن اس کو روکنے کے لئے جا رہا ہے نہیں ہے.
یہ صرف اگلی لائن ہے، اصل میں جس ڈنکی ہے (میں) پھانسی کر سکتے ہیں جانے کے لئے جا رہا ہے.
ڈنکی (میں) میں نمایاں اضافے، ہم دیکھتے ہیں اگر (1 ==).
ہم میں = 1 جانتے ہیں، تو جب ہم قدم، ہم جانتے ہیں کہ ہم oh_no میں کو ختم کرنے جا رہے ہیں
کیونکہ میں = 1 تقریب oh_no، جس سے آپ میں قدم کر سکتے ہیں کہتے ہیں،
جو قائم کرنے کے لئے کی جا رہی ہے چار *** S = اور فوری طور پر "بوم"، شہوت انگیز null.
اور پھر اصل میں buggy2 کے نفاذ میں تلاش
0، 1، یا 2 - - کالنگ binky، اس میں صرف ایک بے ترتیب تعداد ہو رہی ہے
جو اگر میں 0 یہ ہے کہ یہ oh_no مطالبہ ہے، اور یہ ڈنکی مطالبہ، یہاں آتا ہے.
اگر میں 1 ہے، اور کال oh_no slinky فون، جو یہاں آ،
اگر میں 2 ہے، oh_no فون کریں.
میں بھی نہیں ایک راستہ ہے لگتا ہے -
کیا کسی کو بھی یہ ایک پروگرام ہے کہ نہیں segfault گا بنانے کا ایک طریقہ دیکھا ہے؟
کیونکہ جب تک کہ میں کچھ یاد کر رہا ہوں، اگر میں 0، آپ کو فوری طور پر segfault گے،
اور آپ کو ایک تقریب ہے جو اگر میں 1 ہے آپ segfault جانا،
اور آپ کو ایک تقریب میں جہاں اگر میں آپ segfault 2.
کوئی تو بات جو تم کرتے ہو، تم، segfault.
>> میں فکسنگ یہ چار *** S نل = کرنے کے بجائے ایک ہی راستہ لگتا ہے،
آپ اس سٹرنگ کے لئے جگہ malloc سکتا ہے.
sizeof کیا - ہم (sizeof) malloc کر سکتے ہیں؟
[طالب علم] 5 (چار) *؟ >> یہ درست لگتا ہے؟
میں سنبھالنے کے یہ کام اگر میں واقعی میں اس دوڑ رہا ہوں، لیکن یہ نہیں ہے کہ میں کیا دیکھ رہا ہوں.
کے کی قسم کی طرف دیکھو. چلو int * شامل ہے، تو int * X.
میں malloc کرنا (sizeof (int)).
یا اگر میں 5 میں سے ایک صف چاہتے تھے، مجھے کیا کرنا ((int) sizeof 5)؛
کیا ہوگا اگر میں ایک int ** ہے؟
کیا میں malloc گے؟
پوائنٹر [طالب علم] سائز. >> جی ہاں. (sizeof (int *))؛
یہاں نیچے اسی بات.
I (sizeof (چار) *) کرنا چاہتے ہیں؛
یہ پوائنٹر کہ "بوم" کی طرف اشارہ کے لئے جگہ مختص کی جا رہی ہے.
میں نے "بوم" خود کے لئے جگہ مختص کرنے کی ضرورت نہیں ہے
کیونکہ یہ بنیادی طور پر جو میں نے پہلے کہا کے برابر ہے
چار * X = "بوم".
"بوم" پہلے ہی موجود ہے. یہ میموری صرف پڑھنے کے علاقے میں موجود ہوتا ہے.
لیکن یہ پہلے سے ہی موجود ہے، جس میں کوڈ کی اس لائن کا مطلب ہے کہ، اگر کے چار ** ہے،
تو کی * ایک چار * ہے اور آپ کو یہ حروف * قائم کرنے "بوم" کی طرف اشارہ کر رہے ہیں.
اگر میں کے میں "بوم" کی کاپی کرنے کے لئے کرنا چاہتا تھا، تو میں کے لئے جگہ مختص کرنے کی ضرورت ہو گی.
میں کروں گا * کے malloc = (sizeof (چار) 5 *)؛
کیوں 5؟
کیوں نہیں 4؟ ایسا لگتا ہے جیسے "بوم" 4 حروف ہے. >> [طالب علم]، شہوت انگیز null کردار.
جی ہاں. اپنے تمام ڈور کی شہوت انگیز null کردار کی ضرورت کے لئے جا رہے ہیں.
اب میں strcat طرح کچھ کر سکتے ہیں - ایک تار کاپی کرنے کے لئے کام کیا ہے؟
[طالب علم] cpy؟ >> strcpy.
آدمی strcpy.
تو strcpy یا strncpy.
strncpy تھوڑا محفوظ ہے کے بعد آپ کی وضاحت کر سکتے ہیں کس طرح بہت سے حروف،
لیکن یہاں یہ بات کیونکہ ہم جانتے ہیں نہیں ہے.
تو strcpy اور دلائل میں دیکھیں.
پہلی دلیل ہماری منزل ہے.
دوسری دلیل ہماری ذریعہ ہے.
ہم ہماری منزل * میں کاپی کرنے کے لئے جا رہے ہیں پوائنٹر "بوم" S.
آپ کو بجائے کیا ہم نے ایک strcpy کے ساتھ اس سے پہلے کیوں کرنا چاہتے ہو سکتا ہے
کے * = "بوم"؟
آپ ایسا کرنا چاہتے ہیں کر سکتے ہیں کی ایک وجہ ہے، لیکن ہے کہ اس کی وجہ کیا ہے؟
[طالب علم] اگر آپ نے "بوم" میں کچھ تبدیل کرنا چاہتے ہیں. >> جی ہاں.
اب میں کی طرح کچھ کر سکتے ہیں [0] = 'X'؛
کیونکہ کے پوائنٹس ڈھیر پر ڈھیر اور اس خلا کی طرف اشارہ کرتے ہوئے ہے
ڈھیر، جس میں "بوم" ذخیرہ کرنے کے بارے میں زیادہ جگہ پر ایک پوائنٹر ہے.
تو "بوم" کی یہ کاپی ڈھیر میں جمع کیا جا رہا ہے.
تکنیکی طور پر ہمارے پروگرام میں "بوم" کی دو کاپیاں.
پہلے ایک ہے کہ وہ صرف اس "بوم" سٹرنگ مسلسل کی طرف سے دی گئی ہے،
اور "بوم" کی دوسری کاپی، strcpy "بوم" کی نقل ہے.
لیکن "بوم" کی نقل کی جا رہی ہے ڈھیر پر محفوظ، اور ڈھیر آپ کو تبدیل کرنے کے لئے آزاد ہیں.
تاکہ صرف پڑھنے ڈھیر نہیں ہے، اس کا مطلب ہے کہ [0]
تم نے "بوم" کی قدر تبدیل کرنے کی جا رہی ہے.
ہم آپ کو ان حروف کو تبدیل کرنے جا رہا ہے.
>> سوال؟
ٹھیک ہے.
>> buggy3 پر منتقل، چلو gdb buggy3.
ہم صرف اس کے چلانے اور ہم دیکھتے ہیں ہم segfault ایک.
اگر backtrace ہم صرف دو افعال ہیں.
اگر ہم ہمارے مرکزی تقریب میں، ہم دیکھتے ہیں کہ ہم نے اس لائن پر segfaulted.
تو اس لائن کو دیکھ کر، (int لائن = 0؛ fgets یہ سب برابر نل نہیں ہے.
لائن + +).
ہمارے گزشتہ فریم _IO_fgets بلایا گیا تھا.
تم نے دیکھا ہے کہ گے، بلٹ میں C افعال کے ساتھ ایک بہت
کہ جب تم segfault ملتا ہے، وہاں بہت ہی خفیہ تقریب نام ہو جائے گا
اس _IO_fgets کی طرح.
لیکن یہ اس fgets کال سے متعلق ہو رہا ہے.
یہاں اندر کہیں، ہم segfaulting کر رہے ہیں.
اگر ہم دلائل میں fgets دیکھو، ہم بفر پرنٹ کر سکتے ہیں.
آو پرنٹ کے طور پر - اوہ، نہیں.
پرنٹ بالکل کام کرنے کے لئے کے طور پر میں اس سے کرنا چاہتے ہیں نہیں ہے.
اصل پروگرام میں نظر ہے.
بفر کردار صف ہے. 128 حروف کے حروف کی صف ہے.
تو جب میں نے کا کہنا ہے کہ پرنٹ بفر، یہ ان 128 حروف کو پرنٹ کرنے کے لئے جا رہا ہے،
جو مجھے لگتا ہے کہ ہے جو توقع ہے.
کیا میں کے لئے لگ رہا تھا بفر کا پتہ پرنٹ،
لیکن اس سے آپ کے وزٹرز کا ریکارڈ رکھا واقعی نہیں زیادہ کہو.
تو جب میں یہاں X بفر کہنا ہو، آپ کے وزٹرز کا ریکارڈ رکھا 0xbffff090 ظاہر کرتا ہے،
جو، اگر آپ کو پہلے یا کچھ نقطہ سے یاد ہے، Oxbffff اسٹیک ish ایک ایسے خطے میں جاتا ہے.
اسٹیک کہیں صرف 0xc000 کے تحت شروع کرنے دیتی ہے.
اس پتے کو دیکھ کر، میں جانتا ہوں کہ بفر اسٹیک ہو رہا ہے.
میرے پروگرام کو دوبارہ شروع کرنے، چلانے، بفر میں ہم نے دیکھا حروف کے اس ترتیب
جو بہت معنی ہیں.
پھر فائل، پرنٹنگ جو فائل کی طرح لگتی ہے؟
[طالب علم]، اتارنا null. >> جی ہاں.
فائل کی قسم کی فائل * ہے، تو یہ ایک پوائنٹر ہے،
اور کہ پوائنٹر کی قدر خالی ہے.
تو fgets ایک بالواسطہ طریقہ اس پوائنٹر سے پڑھ کرنے کی کوشش کی جا رہی ہے،
لیکن یہ اس لئے کہ پوائنٹر تک رسائی حاصل کرنے کے لئے، یہ dereference ہے.
یا، تک رسائی حاصل کرنے کے لئے یہ کیا ہے، یہ dereferences کی طرف اشارہ کرتے ہوئے کرنا چاہئے.
تو یہ ایک لوڈ، اتارنا null پوائنٹر اور اس segfaults محولہ لقب ضبطی ہے.
میں نے اسے وہاں دوبارہ شروع کر سکتے ہیں.
اگر ہم ہماری اہم موڑ پر توڑ اور چلاتے ہیں،
کوڈ کی پہلی لائن چار * فائل کا نام = "nonexistent.txt" ہے؛
وہ کیوں اس پروگرام ناکام ہو جاتا ہے کے طور پر ایک بہت بڑا اشارہ دینا چاہئے.
اگلے ٹائپ آپ کے وزٹرز کا ریکارڈ رکھا اگلی لائن کی طرف لاتا ہے، جہاں میں نے اس فائل کو کھولنے،
اور پھر میں ہماری لائن، جہاں ایک بار میں اگلے مارا میں فوری طور پر، اس پر segfault جا رہا ہے.
کیا کوئی بھی وجہ سے ہم segfaulting ہو سکتا ہے پر پھینک کرنا چاہتے ہیں؟
[طالب علم] فائل موجود ہی نہیں ہے. >> جی ہاں.
یہ ایک اشارہ کرنا ہے
ہے کہ جب بھی آپ کو ایک فائل کھولنے رہے ہیں آپ کو چیک کرنے کے لیے کرنے کی ضرورت ہے کہ اصل فائل موجود ہے.
تو یہاں "nonexistent.txt"؛
ہم پڑھنے کے لیے fopen فائلنام، جب تو ہم کہنے کی ضرورت
اور اگر (فائل نل ==) کا کہنا ہے کہ printf ("فائل موجود ہی نہیں ہے!"
یا - ابھی تک بہتر - FILENAME)؛ 1 واپسی؛
تو اب ہم اگر یہ نل ہے کو دیکھنے کے لئے چیک کرنے کے لیے
اصل سے پہلے اور اس فائل سے پڑھنے کے لئے کی کوشش کر رہے ہیں.
ہم اسے ریمیک ہے کہ اس کام کو دیکھنے کے لئے کر سکتے ہیں.
میں ایک نئی سطر میں شامل کرنے کا ارادہ ہے.
تو اب nonexistent.txt کا کوئی وجود نہیں ہے.
تم اس طرح بات کے لئے ہمیشہ جانچنا چاہئے.
آپ کو اگر fopen نل واپس دیکھنے کے لئے ہمیشہ جانچنا چاہئے.
آپ کو ہمیشہ اس بات کا یقین کر لیں کہ malloc نل واپس نہیں کرتا ہے بنانے کے لئے چیک کرنے کے لیے چاہیے،
یا آپ کسی segfault.
>> اب buggy4.c.
چل رہا ہے. میں نے یہ اندازہ ان پٹ یا ممکنہ لامحدود looping کے لئے انتظار کر رہی ہوں.
جی ہاں، یہ لامحدود looping ہے.
تو buggy4. ایسا لگتا ہے جیسے ہم لامحدود looping ہیں.
ہمیں مرکزی توڑ کر سکتے ہیں، ہمارے پروگرام چلاتے ہیں.
gdb میں، جب تک کے طور پر مختصر نام جو آپ استعمال کرتے ہیں وہ واضح ہے
یا مخففات ہے کہ وہ آپ کے لئے فراہم کرتے ہیں، خاص
تو آپ (ن) کا استعمال اگلے تمام طریقے سے ٹائپ کرنے کی بجائے اگلے کرنے کے لئے استعمال کر سکتے ہیں.
اور اب کہ میں متاثر (ن) ایک بار ہے، میں صرف درج کریں مارا اگلے جا رکھنے کے لئے کر سکتے ہیں
ن درج کریں مارا، (ن) درج کریں، (ن) درج کریں کرنے کے بجائے.
ایسا لگتا ہے جیسے میں لوپ [میں] 0 صف کی ترتیب ہے کے لئے کسی قسم میں ہوں.
ایسا لگتا ہے جیسا کہ میں توڑ کبھی باہر نہیں رہا ہوں لوپ کے لئے اس کی ہے.
اگر میں پرنٹ، تو میں 2 ہے، تو میں اگلے چلے جائیں گے.
میں میں پرنٹ، میں 3 ہے، تو میں اگلے گے.
میں میں پرنٹ اور میں 3 کریں گے. اگلا، مجھے پرنٹ، 4 ہے.
اصل میں، پرنٹ sizeof (صف)، تو صف کا سائز 20 ہے.
لیکن ایسا لگتا ہے کہ وہاں تک کچھ ہوتا ہے جانے کے لئے کچھ خاص gdb کا حکم ہے.
یہ متغیر کی قدر پر ایک شرط قائم کی طرح ہے. لیکن مجھے یاد نہیں ہے کہ یہ کیا ہے.
تو اگر ہم جا کر رہو -
یہ تم کیا کہہ رہے تھے؟ کیا آپ کو لے آئے ہو؟
[طالب علم] میں ظاہر شامل کیا - >> جی ہاں. تو ظاہر میں مدد کر سکتے ہیں.
اگر ہم بس میں ظاہر ہے، یہ یہاں ڈال میں کی قدر کیا ہے
تو میں اسے باہر ہر وقت پرنٹ کی ضرورت نہیں ہے.
اگر ہم صرف اگلے جا رہو، ہم 0، 1، 2، 3، 4، 5، 0، 1، 2، 3، 4، 5، 0، 1، 2، 3، 4، 5 دیکھتے ہیں.
کچھ بہت غلط ہو رہا ہے، اور میں 0 کی جا رہی ہے ری سیٹ.
کی تلاش میں buggy4.c میں، ہم دیکھتے ہیں جو کچھ ہوتا ہے int صف [5]؛
(، میں <= sizeof (صف)، میں + + میں = 0) کے لئے
صف [میں] = 0؛
جو ہم دیکھتے ہیں وہ غلط ہے؟
ایک اشارہ کے طور پر، جب میں buggy4 gdb کر رہے تھے - دو اہم باگو، توڑ -
میں پرنٹ sizeof (صف) نے دیکھا کس حالت میں ہے جہاں میں آخر میں توڑ کرنا چاہئے.
میں کہاں ہوں؟ میں کیا ہیں؟
میں ابھی تک اعلان نہیں کیا.
تو sizeof (صف) پرنٹ اور یہ 20 ہے،
ہونے کی امید سے اپنے صف 5 سائز کے ہے اور یہ 5 integers ہے،
تو ساری بات 5 * sizeof (int) بائٹس ہونا چاہئے، جہاں sizeof (int) 4 ہو جاتا ہے.
تو sizeof (صف) 20 ہے.
یہ کیا ہونا چاہئے؟
[طالب علم] sizeof (int) کی طرف سے تقسیم کیا ہے. >> جی ہاں، / sizeof (int).
ایسا لگتا ہے جیسے ابھی بھی ایک مسئلہ ہے یہاں. مجھے لگتا ہے کہ یہ تو صرف ہونا چاہئے <
کیونکہ یہ ہمیشہ بہت زیادہ ہے <اور = <کبھی نہیں.
اب ہم یہ کیوں اصل میں ٹوٹ گیا تھا کے بارے میں سوچنا.
کیا کسی کو اندازہ لوپ میں سے ہر ایک iteration کے ذریعے کیوں کیا گیا 0 ری سیٹ؟
یہاں ہو رہا ہے کے اندر صرف ایک چیز جو صف [میں] 0 قائم کرنے جا رہا ہے ہے.
تو کسی نہ کسی طرح، کوڈ کا یہ لائن ہمارے int جس کے نتیجے میں 0 مقرر ہے.
[طالب علم] یہ بھی ہو سکتا ہے کیونکہ اس میں کے اس حصے کی یاد زیرکر رہا ہے کیا جا سکا
یہ سوچتا ہے کہ جب یہ صف کے اگلے عنصر ہے؟ >> [Bowden] جی ہاں.
جب ہم ہمارے صف کے آخر سے باہر جا رہے ہیں،
کسی نہ کسی طرح کہ خلا ہے کہ ہم زیرکر رہا ہے کر رہے ہیں میں کی قدر زیرکر رہا ہے.
اور اگر ایسا ہے تو ہم نے buggy4 میں دیکھتا ہوں، اہم رن، توڑ
ہم میں کا پتہ پرنٹ.
ایسا لگتا ہے جیسے یہ bffff124 ہے.
اب صف کا پتہ پرنٹ [0]. 110.
کیا [1] کے بارے میں کیا؟ 114.
[2]، 118.
11c، 120. [5] صف bfff124 ہے.
صف تو [5] میں، جس کا مطلب ہے کہ صف [5] میں ہے کے طور پر ایک ہی پتہ ہے.
اگر وہ ایک ہی پتہ ہے، وہ ایک ہی چیز ہیں.
تو جب ہم [5] صف قائم 0، ہم میں 0 قائم کرنے کر رہے ہیں.
اور اگر آپ اسٹیک کی شرائط میں اس کے بارے میں کیا سوچتے ہیں،
int میں نے سب سے پہلے اعلان کیا ہے، جس کا مطلب ہے کہ میں اسٹیک پر کچھ جگہ مل جاتی ہے.
پھر [5] صف مختص، تو 20 بائٹس اسٹیک پر مختص ہیں.
لہذا میں نے سب سے پہلے مختص ہو جاتا ہے، تو یہ 20 بائٹس مختص کیے جاتے ہیں.
تو میں درست صف سے پہلے ہوتا ہے،
اور اس وجہ سے راستے سے، گزشتہ ہفتے میں ایسا کہا، جہاں تکنیکی اسٹیک نیچے اگنے،
جب آپ کو ایک صف میں انڈیکس، ہم نے بات کی ضمانت ہیں کہ صف میں 0th پوزیشن
ہمیشہ صف میں پہلی پوزیشن سے پہلے ہوتا ہے.
یہ کس طرح میں نے گزشتہ ہفتے اس متوجہ ہے.
نوٹس ہے کہ ہم نے نیچے دیے گئے 0 پتہ ہے اور سب سے اوپر ہم ایڈریس کی زیادہ سے زیادہ ہے.
اسٹیک ہمیشہ نیچے بڑھ رہی ہے.
چلو کا کہنا ہے کہ ہم میں مختص.
ہم عددی مختص میں ہے، جس کا مطلب ہے چلو یہاں عددی میں مختص ہو جاتا ہے کا کہنا ہے کہ.
پھر ہم 5 integers کے بارے میں ہمارے صف، جو اس کے نیچے اس کا مطلب، مختص
کے بعد اسٹیک نیچے بڑھ رہی ہے، ان 5 integers مختص کیے جاتے ہیں.
لیکن کس طرح arrays کام کی وجہ سے، ہم نے بات کی ضمانت رہے ہیں کہ صف میں پہلی پوزیشن
ہمیشہ ایک صف میں دوسری بات سے کم پتہ ہے.
تو صف پوزیشن 0 ہمیشہ یاد میں سب سے پہلے ہونا ہے،
جبکہ صف 1 کی حیثیت اس کے بعد ہونے
اور صف 2 کی حیثیت اس کے بعد ہونے ہیں،
جس کا مطلب ہے کہ صف پوزیشن 0 کہیں نیچے ہو یہاں،
صف 1 پوزیشن سے اوپر ہوگا
وجہ سے منتقل اعلی پتے کا مطلب ہے سے زیادہ سے زیادہ ایڈریس یہاں ہے.
[0] صف یہاں تو، صف [1] اپ یہاں صف [2] اپ یہاں [3] صف یہاں.
نوٹس پہلے کہ ہم کس طرح عددی مختص میں سب کو یہاں،
کے طور پر ہم اپنے صف میں مزید اور مزید منتقل، ہم قریب اور ہماری عددی میں قریب ہو رہے ہیں.
یہ صرف اس لئے کہ صف [5] ہوتا ہے، جس میں ہمارے صف سے باہر ایک حیثیت ہے،
بالکل میں جہاں عددی مختص ہوا ہے.
تو وہ نقطہ جہاں ہم نے اسٹیک پر جگہ پر مار رکھا جائے ہوا ہے
جو عددی میں کے لئے مختص کیا گیا تھا، اور ہم اس 0 قائم کرنے کر رہے ہیں.
>> اس کا ہے ہے کہ وہ کس طرح کام کرتا ہے. سوال؟ جی ہاں.
[طالب علم] کوئی بات نہیں. ٹھیک ہے.
[طالب علم] آپ ان قسم کی غلطیوں کے کس طرح سے بچنے کے کر سکتا ہوں؟
یہ قسم کی غلطیوں کے؟ کیا C آپ کی پروگرامنگ زبان کے طور پر استعمال نہ کریں.
ایک ایسی زبان ہے جو صف کی جانچ پڑتال حد ہے کا استعمال کریں.
جب تک کے طور پر آپ کو ہوشیار ہو، تو آپ صرف اپنے صف کی حد کے ماضی میں جانے سے گریز کرنے کی ضرورت ہے.
[طالب علم] تو یہاں جب ہم نے آپ کے صف کی حد ماضی گئے -
[Bowden] یہ چیزیں کہاں غلط ہو رہا شروع. >> [طالب علم] اوہ، ٹھیک ہے.
جب تک کے طور پر آپ کو آپ کے صف کے لئے مختص میموری کے اندر اندر رہیں، تم ٹھیک ہو.
لیکن C کوئی غلطی چیکنگ کرتا ہے. اگر میں صف کرتے [1000]، یہ صرف خوشی نظر ثانی جو بھی ہو گا -
یہ صف کے آغاز کو جاتا ہے، تو اس کے بعد 1000 کی پوزیشنوں کو جاتا ہے اور یہ سیٹ 0.
یہ کسی بھی چیکنگ کہ اوہ، یہ اس میں 1000 چیزیں اصل میں نہیں ہے نہیں ہے.
1000 طریقہ جو میں تبدیل کر ہونا چاہئے سے باہر ہے،
جبکہ جاوا یا کچھ اور آپ کو صف حد انڈیکس کی باہر کریں گے
یا حد کے استثناء سے باہر فہرست.
یہی وجہ ہے کہ اعلی سطح زبانوں میں سے ایک بہت کچھ ان چیزوں
جہاں اگر آپ صف کی حد سے باہر چلے جاؤ، تم ناکام
تاکہ تم نیچے سے چیزیں تبدیل نہیں کر سکتے
اور پھر چیزیں صرف ایک رعایت حاصل کرنے سے کہیں زیادہ برا جانا
کہہ رہے ہیں کہ آپ نے صف کے آخر سے باہر چلا گیا.
[طالب علم] اور اس طرح ہم نے صرف تبدیل کرنا چاہئے <= صرف <؟ >> [Bowden] جی ہاں.
<sizeof (صف) / (int) sizeof ہونا چاہئے؛
کے بعد sizeof (صف) 20 ہے، لیکن ہم صرف 5 چاہتے ہیں. >> [طالب علم] ٹھیک ہے.
مزید سوال؟ ٹھیک ہے.
>> [طالب علم] میں ایک سوال کے جواب میں ہے. >> جی ہاں.
[طالب علم] اصل صف متغیر کیا ہے؟
[] Bowden طرح کیا صف ہے؟
لڑی خود کو ایک علامت ہے.
یہ صرف 20 بائٹس کہ ہم حوالہ رہے ہیں کے آغاز کا پتہ ہے.
اس میں سے تم ایک پوائنٹر کے طور پر لگتا ہے، لیکن کر سکتے ہیں یہ ایک مسلسل پوائنٹر ہے.
جیسے ہی چیزوں کو مرتب کرنے کے لئے، متغیر صف اب موجود نہیں ہے.
[طالب علم] تو صف کے سائز کس طرح پتہ ہے؟
صف کا سائز اس بلاک کے سائز ہے کہ اس کی علامت سے مراد ہے.
جب میں printf طرح کچھ ("٪ P \ N"، صف) کرو،
چلو اسے چلاتے ہیں.
میں صرف کیا غلط کیا تھا؟
صف 'صف' کا اعلان کر دیا.
اوہ، یہاں.
بجنا ہوشیار ہے، اور یہ دیکھیں گے کہ میں 5 عناصر کے طور پر صف کا اعلان کر دیا ہے
لیکن میں 1000 کی پوزیشن میں تخکرمن کر رہا ہوں.
یہ ایسا کیونکہ یہ صرف constants ہیں کر سکتے ہیں.
یہ دیکھ رہا ہوں کہ میں صف کی حد سے باہر جا رہا ہوں میں اب تک ہی جا سکتے ہیں.
لیکن جب ہم نے سے پہلے میں غلط نوٹس،
شاید نہیں کتنی اقدار میں وقت لگ سکتا ہے اس بات کا تعین کر سکتے ہیں،
تو اس کا تعین نہیں ہے کہ میں صف کے آخر سے باہر جا رہا تھا سکتا ہے.
یہ صرف ہوشیار ہونے کے بجنا ہے.
>> لیکن اب buggy4 ہے. تو اور کیا میں غلط کر رہا ہوں؟
لپیٹ لائبریری تقریب 'printf' قرار دیا ہے.
میں # شامل کرنا چاہتے ہیں کے لئے جا رہا ہوں.
ٹھیک ہے. اب buggy4 چل رہا ہے.
کی طرح صف کی قدر طباعت میں یہاں کیا، ایک پوائنٹر کے طور پر پرنٹنگ
پرنٹس کچھ ہے کہ اس طرح لگ رہا ہے - bfb8805c - جس میں کچھ پتہ ہے
اسٹیک ish علاقے میں ہے.
لڑی خود پوائنٹر طرح ہے، لیکن یہ ایک حقیقی پوائنٹر نہیں ہے،
ہم ایک باقاعدہ پوائنٹر سے تبدیل کر سکتے ہیں.
لڑی صرف کچھ مسلسل جاری ہے. میموری کا 20 بلاکس ایڈریس 0xbfb8805c میں شروع ہیں.
اس ایڈریس کے ذریعے تو bfb8805c +20- یا میں -20 اندازہ ہے -
اس صف کے لئے مختص میموری ہے.
صف، متغیر خود کہیں بھی محفوظ نہیں ہے.
جب آپ انتخاب کر رہے ہیں، کمپائلر - اس میں ہاتھ لہر -
لیکن سنکلک جہاں یہ صف ہونا جانتا ہے استعمال کریں گے.
یہ جانتا ہے جہاں کہ صف شروع ہوتی ہے،
اور تو اس offsets کی شرائط میں ہمیشہ چیزوں کو کہ شروع سے ہی کر سکتے ہیں.
یہ ایک متغیر خود صف کی نمائندگی کرنے کی ضرورت نہیں ہے.
لیکن جب میں نے int * P صف = کی طرح کچھ کرتے ہیں، اب پی پوائنٹر جو کہ صف میں اشارہ ہے،
اور اب اسٹیک P اصل میں کوئی وجود نہیں ہے.
میں پی تبدیل کرنے کے لئے آزاد ہوں. P = malloc کر سکتے ہیں.
تو یہ اصل میں صف کی طرف اشارہ کیا، اب یہ ڈھیر پر کسی جگہ اشارہ ہے.
میں صف = malloc نہیں کر سکتے.
اگر بجنا ہوشیار ہے، اس بیٹ سے دور حق کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے متعلق چللاو گا.
اصل میں، میں خوبصورت کو یقین ہے کہ جی سی سی ایسا بھی ہوں.
تو صف قسم int [5] 'assignable نہیں ہے.
تم کچھ ایک صف کی قسم کی وضاحت نہیں کر سکتے
کیونکہ صف صرف ایک مسلسل جاری ہے.
یہ علامت ہے جو حوالہ جات ان 20 بائٹس ہے. میں اسے تبدیل نہیں کر سکتے.
>> [طالب علم] اور جہاں صف کا سائز محفوظ کیا جاتا ہے؟
[Bowden] یہ کہیں بھی محفوظ نہیں ہے. ایسا لگتا ہے جب یہ انتخاب ہے.
تو جہاں صف کا سائز محفوظ کیا جاتا ہے؟
آپ کو تقریب ہے کہ صف خود اعلان کیا ہے کے اندر صرف sizeof (صف) کا استعمال کر سکتے ہیں.
تو اگر میں نے کچھ تقریب، FOO کرتے ہیں، اور مجھے کیا کرنا (int صف [])
printf ("٪ D \ N"، sizeof (صف))؛
اور پھر یہاں ذیل میں FOO (صف) کہتے ہیں؛
کے اندر اس تقریب میں سب کچھ - چلو اسے چلاتے ہیں.
یہ ہوشیار دوبارہ ہونے کے بجنا ہے.
یہ مجھ سے کہہ رہا ہے کہ صف تقریب پیرامیٹر پر sizeof
'int *' سائز واپس آ جائیں گے.
یہ ایک غلطی ہے اگر یہ نہیں ہے جو میں ہونا ہی چاہتا تھا.
چلو، اصل میں Werror باری.
انتباہ. انتباہ ٹھیک ہیں.
ابھی بھی جب تک مرتب کے طور پر یہ ایک انتباہ ہے.
a.out / 4 پرنٹ کرنے کے لئے کی جا رہی ہے.
انتباہ کیا ہے کہ پیدا کیا گیا تھا کیا غلط ہو گیا ایک واضح اشارہ ہے.
اس int صف sizeof (* int) کو پرنٹ کرنے کے لئے کی جا رہی ہے.
یہاں تک کہ اگر میں یہاں [5] صف ڈال، یہ اب بھی صرف sizeof (* int) کو پرنٹ کرنے کے لئے جا رہے ہیں.
تو جیسے ہی کے طور پر آپ کو ایک تقریب میں اس کے پاس، arrays اور اشارہ کے درمیان فرق
نابود ہے.
یہ ایک صف ہے جو کہ آپ نے اسٹیک اعلان کیا گیا تھا ہے وہ یہ کہ یہ ہے،
لیکن جیسے ہی ہم اس قدر پاس کہ 0xbf وغیرہ، وغیرہ، اس تقریب میں BLAH،
تو اس پوائنٹر اسٹیک پر اس صف پر دکھاتا ہے.
تو اس کا مطلب ہے کہ صرف sizeof تقریب کہ صف قرار دیا گیا میں لاگو ہوتا ہے،
جس کا مطلب ہے کہ تم نے اس تقریب کو جب مرتب کر رہے ہیں،
جب بجنا اس تقریب کے ذریعے جاتا ہے، دیکھتا ہے سرنی 5 سائز کے ایک int صف ہے.
تو یہ sizeof (صف) دیکھتا ہے. ٹھیک ہے، یہ 20 ہے.
یہ اصل میں ہے کہ کس طرح sizeof بنیادی طور پر تقریبا تمام صورتوں کے لئے کام کرتا ہے.
Sizeof ایک تقریب نہیں ہے، یہ ایک آپریٹر ہے.
آپ کو sizeof تقریب کو فون نہیں ہے.
(int) Sizeof، سنکلک کہ 4 ترجمہ جائے گا.
سمجھے؟ ٹھیک ہے.
>> [طالب علم] تو اہم اور FOO میں sizeof (صف) کے درمیان فرق کیا ہے؟
یہ اس لئے ہے کیونکہ ہم sizeof (صف)، جو قسم int * کہہ رہے ہو،
جبکہ صف یہاں ذیل قسم int * نہیں ہے، یہ ایک int صف ہے.
>> [طالب علم] لہذا، اگر آپ کو [] کے بجائے صف int * صف میں پیرامیٹر تھا
اس کا یہ مطلب ہے کہ آپ اب بھی صف کیونکہ اب یہ پوائنٹر ہے تبدیل کر سکتا ہوں؟
[Bowden] اس طرح؟ >> [طالب علم] جی ہاں. صف اب آپ کو تقریب کے اندر اندر تبدیل کر سکتا ہوں؟
[Bowden] آپ دونوں صورتوں میں صف کو تبدیل کر سکتے ہیں.
ان دونوں مقدمات کی میں آپ کا کہنا ہے کہ [4] صف = 0 آزاد ہیں.
[طالب علم] لیکن صف نقطہ آپ کچھ کر سکتے ہیں؟
[Bowden] اوہ. جی ہاں. دونوں میں سے کسی بھی صورت میں میں سب کچھ - >> [طالب علم] جی ہاں.
[Bowden] صف] [اور ایک int * صف کے درمیان فرق ہے، وہاں کوئی نہیں ہے.
آپ یہاں کچھ کثیرالابعاد سرنی بھی حاصل کر سکتے ہیں
کچھ آسان نحو کے لئے ہے، لیکن یہ اب بھی صرف ایک پوائنٹر ہے.
اس کا مطلب یہ ہے کہ میں صف کرنے کے لئے آزاد ہوں = malloc (sizeof (int))؛ اور اب کسی اور کی طرف اشارہ ہے.
صرف پسند کرتے ہیں لیکن یہ کس طرح ہمیشہ کے لئے اور ہمیشہ کام
اسے بنا کر اس صف کو تبدیل کرنے سے کچھ کی طرف اشارہ
کیا یہ صف تبدیل نہیں یہاں کیونکہ یہ دلیل کی ایک نقل ہے،
اس سے اس دلیل کو پوائنٹر نہیں ہے.
اور اصل میں، صرف اشارہ ہے کہ یہ بالکل ایسا ہی ہے کے طور پر میں سب کچھ -
ہم نے پہلے سے ہی کیا پرنٹنگ صف پرنٹس کو دیکھا ہے -
کیا ہوا اگر ہم صف کا ایڈریس یا صف کا ایڈریس کا پتہ پرنٹ کریں
ان میں سے کسی کو؟
چلو، اس ایک کو نظر انداز.
ٹھیک ہے. یہ ٹھیک ہے. اب یہ a.out / چل رہا ہے.
چھپائی کی صف، پھر صف کا پتہ، پرنٹنگ ایک ہی چیز ہیں.
لڑی صرف موجود ہی نہیں ہے.
یہ جانتا ہے کہ جب تم صف چھپائی رہے ہیں، آپ کی علامت ہے کہ ان 20 بائٹس سے مراد چھپائی رہے ہیں.
صف کا پتہ، پرنٹنگ ٹھیک ہے، صف کا کوئی وجود نہیں ہے.
یہ پتہ نہیں ہے، تو یہ صرف ان 20 بائٹس کی ایڈریس پرنٹ.
جیسے ہی آپ نیچے مرتب آپ کے مرتب buggy4 میں پسند / a.out.
صف نابود ہے.
اشارہ موجود ہے. Arrays نہیں کرتے ہیں.
میموری کے بلاکس صف کی نمائندگی اب بھی موجود ہیں،
لیکن متغیر صف اور اس قسم کی متغیر کا کوئی وجود نہیں ہے.
وہ arrays اور اشارہ کے درمیان بنیادی اختلافات کی طرح ہیں
جیسے ہی آپ کے تقریب کو کالیں، اس سے کوئی فرق نہیں ہے.
لیکن اندر تقریب کہ صف خود کا اعلان کیا ہے، sizeof مختلف طریقے سے کام کرتا ہے
، کیونکہ آپ بجائے قسم کے سائز کے بلاکس کا سائز چھپائی رہے ہیں
اور آپ اسے تبدیل نہیں کر سکتے ہیں کیونکہ اس میں ایک نشانی ہے.
بات کی بات اور پتہ طباعت ایک ہی بات پرنٹ.
اور یہ بہت زیادہ ہے.
[طالب علم] کہ تم ایک اور بار کہہ سکتے ہیں؟
میں کچھ یاد ہو سکتا ہے.
سرنی چھپائی کی صف اور ایک ہی بات پتہ پرنٹ،
، اگر آپ پوائنٹر کے ایڈریس کے مقابلے میں ایک پوائنٹر پرنٹ کریں جبکہ
ایک بات کیا آپ کی طرف اشارہ کرتے ہوئے کر رہے ہیں کا پتہ پرنٹ،
دیگر اسٹیک پر پوائنٹر کا پتہ پرنٹ.
آپ کو ایک پوائنٹر کو تبدیل کر سکتے ہیں، آپ کو ایک صف کی علامت تبدیل نہیں کر سکتے.
اور sizeof پوائنٹر اس پوائنٹر قسم کے سائز کو پرنٹ کرنے کے لئے کی جا رہی ہے.
تو int * P sizeof (P) 4 پرنٹ کرنے کے لئے کی جا رہی ہے،
لیکن int [5] صف پرنٹ sizeof (صف) 20 پرنٹ جا رہا ہے.
[طالب علم] تو int [5] صف 20 پرنٹ کرے گا؟ >> جی ہاں.
یہی وجہ ہے کہ buggy4 کے اندر جب یہ sizeof (صف) کرتے تھے
جو اس میں کر 20 <گیا تھا، نہیں ہے جو ہم چاہتے تھے.
ہم میں 5 <چاہتے ہیں. >> [طالب علم] ٹھیک ہے.
[Bowden] اور پھر جیسے ہی تم افعال میں گزرنے والے شروع،
اگر ہم نے int * P صف =؛
اس تقریب کے اندر، ہم بالکل اسی طرح سے P اور صف بنیادی طور پر استعمال کر سکتے ہیں،
سوائے sizeof مسئلہ اور تبدیل کرنے کے مسئلہ کے لئے.
لیکن P [0] = 1، [0] صف = 1 کہہ کے طور پر ایک ہی ہے؛
اور جیسے ہی ہم FOO (صف) کا کہنا ہے کہ؛، یا (P) FOO
FOO تقریب کے اندر، یہ ایک ہی کال میں دو بار ہے.
ان دو فون کے درمیان کوئی فرق نہیں ہے.
>> اچھا ہر کوئی اس پر؟ ٹھیک ہے.
ہمارے پاس 10 منٹ ہیں.
>> ہم اس ہیکر Typer پروگرام کے ذریعے حاصل کرنے کی کوشش کریں گے،
اس ویب سائٹ، جس میں گزشتہ سال یا کچھ باہر آ گیا.
یہ صرف ہونا چاہیئے طرح آپ کو تصادفی ٹائپ اور اسے باہر پرنٹ -
جو بھی فائل کو لوڈ کیا ہے ہوتا ہے جو ایسا لگتا ہے جیسے آپ ٹائپ کر رہے ہیں.
یہ آپریٹنگ سسٹم کوڈ کے کسی قسم کی طرح لگ رہا ہے.
اس کا ہے جو ہم پر عملدرآمد چاہتے ہیں.
آپ کو ایک بائنری نام hacker_typer کارکردگی قابل ہونا چاہئے
جو ایک ایک بحث میں لیتا ہے، فائل "ہیکر کی قسم."
کارکردگی چلانے کی سکرین صاف چاہئے
اور ایوان میں فائل کی طرف سے ہر بار جب صارف ایک اہم پریس تو ایک کردار پرنٹ.
جو کچھ بھی کلید کو دبانے تو دور پھینک دیں اور بجائے سے ایک کردار کی فائل کو پرنٹ کرنا چاہئے
یہ دلیل ہے.
میں تم سے بہت زیادہ بتاو کہ کیا چیزیں ہم جاننے کی ضرورت کے لئے جا رہے ہیں ہیں کریں گے.
لیکن ہم termios لائبریری چیک کرنے کے لیے کرنا چاہتے ہیں.
میں نے اس لائبریری کا استعمال کیا کبھی اپنی پوری زندگی میں، تو یہ بہت ہی کم سے کم مقاصد ہیں.
لیکن یہ لائبریری ہم دور کردار تم نے مارا پھینک کا استعمال کر سکتے ہیں کی جا رہی ہے
جب آپ اندر معیار میں ٹائپ کر رہے ہیں
تو hacker_typer.c، اور ہم # شامل کرنا چاہتے ہیں جا رہے ہیں.
termios کی تلاش کے لئے مرد صفحہ - I'm یہ ٹرمینل OS یا کچھ اندازہ ہے -
مجھے پتہ نہیں کہ یہ کس طرح پڑھنے کے لئے ہے.
کی تلاش میں اس کو ان 2 فائلوں کو شامل کرنے کے لئے کہتے ہیں، تو ہم ایسا کریں گے.
>> پہلی چیز سب سے پہلے، ہم ایک ایک دلیل، جو فائل ہم کھلنا چاہیے ہے میں لینے کے لئے چاہتے ہیں.
تو مجھے کیا کرنا چاہتے ہیں؟ میں دیکھ رہا ہوں میں ایک ایک دلیل ہے کیسے چیک کر سکتا ہوں؟
[] طالب علم اگر argc یہ برابر ہے. >> [Bowden] جی ہاں.
لہذا اگر (argc = 2) printf ("استعمال:٪ [فائل کھولیں]").
لہذا اب اگر میں نے ایک دوسری دلیل فراہم کرنے کے بغیر اس چلاتے ہیں - اوہ، میں نئی ​​لائن کی ضرورت ہے -
تمہیں دیکھ کر یہ استعمال کا کہنا ہے کہ ہوں گے: / hacker_typer.
اور پھر دوسری دلیل فائل میں چاہتا ہوں کہ کھولنے کی ہونا چاہئے.
اب میں کیا کروں؟
میں نے اس فائل سے پڑھنے کے لئے چاہتے ہیں. میں ایک فائل سے کس طرح پڑھ سکتا ہوں؟
[طالب علم] آپ پہلے کھولتے. >> جی ہاں.
تو fopen. کیا fopen طرح لگتی ہے؟
[طالب علم] فائل کا نام ہے. >> [Bowden] فائل کا نام argv [1] کے طور پر کی جا رہی ہے.
[طالب علم] اور پھر کیا تم اس کے ساتھ کیا کرنا چاہتے ہیں، تو - >> [Bowden] جی ہاں.
لہذا اگر آپ کو یاد نہیں، آپ کو آدمی fopen کرنا ہو سکتا ہے،
جہاں یہ const چار * راستہ ہے جہاں راستہ FILENAME ہے ہونے جا رہا ہے،
const حروف * موڈ.
اگر آپ کو یاد نہیں کیا موڈ ہے ہوا، تو آپ موڈ کے لئے دیکھ سکتے ہیں.
انسان کے صفحات کے اندر، سلیش کردار ہے جو تم چیزوں کو تلاش کرنے کے لئے استعمال کر سکتے ہیں.
تو I / موڈ کے لئے تلاش کرنے کے موڈ ٹائپ کریں.
(ن) اور این جو آپ تلاش کے میچوں کے ذریعے سائیکل کرنے کے لئے استعمال کر سکتے ہیں.
یہاں یہ ایک تار دلیل موڈ پوائنٹس کا کہنا ہے کہ
مندرجہ ذیل انداز میں سے ایک کے ساتھ شروع.
ر تو پڑھنے کے لیے اوپن ٹیکسٹ فائل ہے. اس کا ہے جو ہم کرنا چاہتے ہیں.
کے لئے پڑھنے، اور میں اس کی دکان پر چاہتے ہیں.
بات ایک فائل * پر کی جا رہی ہے. اب میں کیا کرنا چاہتے ہیں؟
مجھے ایک دوسری دو.
ٹھیک ہے. اب میں کیا کرنا چاہتے ہیں؟
[طالب علم] اگر وہ نل ہے چیک کریں. >> [Bowden] جی ہاں.
کسی بھی وقت آپ کو ایک فائل کو کھولنے، اس بات کا یقین کر لیں کہ آپ کامیابی کے ساتھ اسے کھولنے کے قابل ہو.
>> اب میں کہ termios چیزیں کرنا چاہتا ہوں جہاں میں نے سب سے پہلے اپنے موجودہ ترتیبات کا مطالعہ کرنا چاہتے ہیں
اور کچھ میں ان کو بچانے کے لئے، اور پھر میں اپنی ترتیبات کو تبدیل کرنا چاہتے ہیں
کسی بھی کردار میں ٹائپ کرنے کے لئے پھینک،
اور اس کے بعد میں ان کی ترتیبات کو اپ ڈیٹ کرنا چاہتے ہیں.
اور پھر پروگرام کے آخر میں، مجھے میرے اصل ترتیبات پر واپس تبدیل کرنا چاہتے ہیں.
تو struct قسم termios کی جا ہے، اور میں ان میں سے دو کرنا چاہتے ہیں جا رہا ہوں.
سب سے پہلے میری current_settings جا رہا ہے،
اور پھر وہ میرے hacker_settings ہونے جا رہے ہیں.
سب سے پہلے، میں اپنے موجودہ ترتیبات کو محفوظ کرنا چاہتے ہیں کے لئے جا رہا ہوں،
تو میں hacker_settings کو اپ ڈیٹ کرنا چاہتے ہیں کے لئے جا رہا ہوں،
اور پھر اپنے پروگرام کے آخر میں، میں موجودہ ترتیبات پر واپس آجائے کرنا چاہتے ہیں.
تو موجودہ ترتیبات محفوظ، اس طرح سے کام کرتا ہے، ہم نے انسان termios.
ہم دیکھتے ہیں کہ ہم اس int tcsetattr، tcgetattr int ہے.
میں اس پوائنٹر کی طرف سے ایک termios struct میں گزرتے ہیں.
طرح یہ نظر آئے گا ہے - I've پہلے ہی بھلا کیا تقریب میں بلایا گیا تھا.
اور اسے کاپی اور پیسٹ کریں.
تو tcgetattr، تو میں struct میں منتقل کرنے کی کہ میں میں معلومات بچا رہا ہوں کرنا چاہتے ہیں،
جو current_settings ہونے جا رہا ہے،
اور پہلی دلیل چیز میں کی صفات کو بچانے کے لئے کرنا چاہتے ہیں کے لئے فائل ویورنک ہے.
فائل ویورنک کیا ہے کسی بھی وقت آپ کو ایک فائل کو کھولنے کی طرح ہے، ایک فائل ویورنک ملتا ہے.
جب fopen میں argv [1]، یہ ایک فائل ویورنک ہے جس میں آپ کو حوالہ کر رہے ہیں ہو جاتا ہے
جب بھی آپ کو یا اس سے لکھنے پڑھنے کرنا چاہتے ہیں.
یہ فائل ویورنک میں یہاں استعمال کرنے کے لئے کرنا چاہتے ہیں نہیں ہے.
تین فائل descriptors آپ ڈیفالٹ کی طرف سے ہیں،
جو معیار میں ہیں، معیاری باہر، اور معیاری غلطی.
ڈیفالٹ کی طرف سے، مجھے لگتا ہے کہ یہ ہے معیاری 0، معیار سے 1 ہے، اور معیاری نقص 2 ہے.
تو کیا میں کی ترتیبات کو تبدیل کرنے کے لئے کرنا چاہتے ہیں؟
میں جب بھی میں نے ایک کردار کو مارا کی ترتیبات کو تبدیل کرنے کے لئے چاہتے ہیں،
میں اسے پردے پر پرنٹ کرنے کے بجائے اس کردار کو دور پھینک کرنا چاہتے ہیں.
کیا ندی - میں معیاری باہر، یا معیاری غلطی معیار -
چیزوں کا جواب جب میں کی بورڈ میں ٹائپ کریں؟ >> [طالب علم] >> جی ہاں اندر سٹینڈرڈ
تو میں 0 یا میں stdin کر سکتے ہیں کر سکتے ہیں.
میں اندر معیار کی current_settings ہو رہا ہے
>> اب میں ان کی ترتیبات کو اپ ڈیٹ کرنا چاہتے ہیں،
تو سب سے پہلے میں کیا hacker_settings میرے current_settings میں کاپی کریں گے.
اور کس طرح structs کام ہے یہ صرف کاپی گا.
یہ تمام شعبوں نقل کرتا ہے، آپ کے طور پر توقع کریں گے.
>> اب میں شعبوں میں سے کچھ کو اپ ڈیٹ کرنا چاہتے ہیں.
کی تلاش میں termios میں، آپ اس کی ایک بہت کے ذریعے پڑھنے کے لئے ہوگا
صرف یہ دیکھنا ہے کہ آپ کو تلاش کرنے کے لئے چاہتے ہیں،
لیکن پرچم آپ کو تلاش کرنے کے لئے چاہتے ہیں کے لئے جا رہے ہیں گونج ہیں،
بازگشت ان پٹ حروف بازگشت.
سب سے پہلے میں قائم کرنے کے لئے کرنا چاہتے ہیں - I've پہلے ہی بھول موضوعات ہیں.
یہ وہی ہے جو struct کی طرح لگتا ہے.
تو ان پٹ طریقوں میں لگتا ہے کہ ہم کو تبدیل کرنا چاہتے ہیں.
ہم حل تلاش کریں گے اس بات کا یقین کر لیں کہ ہے جو ہم کو تبدیل کرنا چاہتے ہیں بنانے کے لئے کریں گے.
ہم lflag ان تمام کے ذریعے تلاش کرنے کی ضرورت کو روکنے کے لئے کے لئے تبدیل کرنا چاہتے ہیں.
ہم مقامی طریقوں کو تبدیل کرنا چاہتے ہیں.
آپ کو اس پوری بات کے ذریعے پڑھنے کی سمجھ میں جہاں ہر چیز سے تعلق رکھتا ہے
کہ ہم کو تبدیل کرنا چاہتے ہیں.
لیکن یہ مقامی طریقوں جہاں ہم کہ اس کو تبدیل کرنا چاہتے کرنے جا رہے ہیں کے اندر ہے.
تو hacker_settings.cc_lmode ہے جو یہ کہتے ہیں.
c_lflag.
اس کا ہے جہاں ہم bitwise آپریٹرز میں ملتا ہے.
ہم وقت سے باہر کی طرح ہیں، لیکن ہم یہ اصلی جلد کے ذریعے جائیں گے.
یہی وہ جگہ ہے جہاں ہم bitwise آپریٹرز میں،
جہاں مجھے لگتا ہے کہ میں ایک وقت بہت پہلے کہا ہے، کہ جب بھی آپ کو پرچم سے نمٹنے شروع
آپ bitwise آپریٹر بہت استعمال کرتے ہوئے جا رہے ہیں.
پرچم میں ہر سا رویہ کسی قسم کے مساوی ہے.
تو یہاں یہ پرچم دونوں مختلف چیزیں ہیں، جہاں ان میں سے سب کچھ مختلف مطلب کا ایک گروپ ہے.
لیکن جو میں کرنا چاہتا ہوں بٹ جس سے گونج کے مساوی ہے باری.
تو باری ہے کہ کیا میں ایسا کرتے ہیں & = ¬ ایکو.
اصل میں، مجھے لگتا ہے کہ یہ tECHO یا کچھ اور کی طرح ہے. میں نے ابھی دوبارہ چیک کرنے کے لیے جا رہا ہوں.
میں اسے termios کر سکتے ہیں. یہ صرف بازگشت ہے.
ایکو کسی ایک سا ہونے جا رہا ہے.
¬ ایکو مطلب تمام بٹس 1 مقرر کر دیا جاتا ہے، جس کا مطلب ہے کہ تمام جھنڈوں سچ کی تیاری میں ہیں کی جا رہی ہے
سوائے ایکو تھوڑا کے لئے.
اس کے ساتھ اپنے مقامی پرچم کو ختم کر، یہ پرچم اس وقت صحیح مقرر کر دیا جاتا ہے کا مطلب ہے کہ
اب بھی درست رکھا جائے گا مقرر کیا ہے.
اگر میرا ایکو پرچم حقیقی کے لئے مقرر کیا گیا ہے، تو یہ ضروری ایکو پرچم پر جھوٹے پر مقرر کیا گیا ہے.
تو کوڈ کے اس لائن ایکو پرچم دیتا ہے.
کوڈ کے دیگر لائنز میں انہیں وقت کے مفاد میں اور پھر کاپی اس کی وضاحت کریں گے.
حل میں انہوں نے 0 نے کہا کہ.
یہ شاید بہتر stdin پر واضح طور پر کہنا.
>> نوٹس ہے کہ میں نے بھی ایکو کر رہا ہوں | ICANON یہاں.
ICANON الگ کچھ، جو وہیت موڈ کا مطلب ہے کہ مراد ہے.
کیا وہیت موڈ کا مطلب ہوتا ہے، جب آپ باہر ٹائپ کمانڈ لائن ہیں
میں معیار کچھ بھی عملدرآمد نہیں ہے جب تک کہ آپ newline مارا.
تو جب آپ GetString کرتے ہیں، آپ کا ایک گروپ چیزیں ٹائپ کریں، تو آپ newline مارا.
اس کا ہے جب اس کے اندر معیار کو بھیجا ہے
وہ پہلے سے طے شدہ ہے.
جب میں نے وہیت موڈ کو بند ہو، اب ہر ایک کردار کو دبانے
ہے جو کارروائی ہے، جو عام طور پر برے قسم کا ہے کیونکہ یہ ان چیزوں پر عملدرآمد کرنے میں سست ہے ہو جاتا ہے،
یہی وجہ ہے کہ یہ اچھی بات ہے کہ اسے پورے لائنوں میں بفر.
لیکن میں ہر کردار پر کارروائی کرنا چاہتے ہیں
کیونکہ میں نے اسے انتظار کے لئے آپ کے وزٹرز کا ریکارڈ رکھا newline کو نشانہ بنانے کے لئے نہیں کرنا چاہتا
اس سے پہلے کہ تمام حروف پر عملدرآمد میں ٹائپ ہے.
اس سے وہیت موڈ بدل جاتا ہے.
یہ چیزیں صرف کا مطلب ہے کہ جب یہ اصل میں حروف پر عملدرآمد ہے.
اس کا مطلب یہ ہے کہ انہیں فوری طور پر کاروائی، جیسے ہی میں نے ان کو ٹائپ کر رہا ہوں، ان پر عملدرآمد ہے.
اور یہ تقریب جو معیار کے لئے میری ترتیبات میں اپ ڈیٹ کرنے ہے ہے،
اور TCSA کا مطلب یہ ابھی کرتے ہیں.
دوسرے اختیارات انتظار جب تک سب کچھ جو ندی پر ہیں پر کارروائی کر رہے ہیں.
یہ واقعی کوئی فرق نہیں پڑتا.
بس ابھی میری ترتیبات جو کچھ بھی اس وقت hacker_typer_settings میں ہے کو تبدیل کرنے.
مجھے لگتا ہے کہ میں نے اسے hacker_settings کہا جاتا ہے، اس لئے کہ تبدیل.
سب کچھ hacker_settings پر تبدیل کریں.
>> اب ہم ہمارے پروگرام کے آخر میں آپ کو واپس کرنا چاہتے ہیں جا رہے ہیں
کیا وقت normal_settings کے اندر ہے،
جس میں صرف normal_settings اور عمومی طرح دیکھنے جا رہا ہے.
نوٹس میں اصل میں حاصل کرنے کے بعد میرے normal_settings میں سے کسی ایک تبدیل کر دیا ہے نہیں ہے.
تو پھر انہیں واپس پر تبدیل کرنے کے لئے، میں نے ان سے آخر میں گزرتے ہیں.
یہ اپ ڈیٹ تھا. ٹھیک ہے.
>> اب اندر یہاں سے میں وقت کے مفاد میں کوڈ صرف سمجھا دونگا.
یہ اتنا کوڈ نہیں ہے.
ہم دیکھتے ہیں ہم سے ایک کردار کی فائل کو پڑھنے کے. ہم اس F ملاقات کی.
اب تم وہ آدمی fgetc لیکن کر سکتے ہیں کس طرح fgetc کام پر جا رہا ہے
ہے، صرف یہ کردار ہے کہ آپ نے ابھی یا مسل اختتام پڑھ واپس جا رہا ہے
جو کہ فائل کے آخر یا کوئی غلطی ہو رہا مساوی ہے.
ہم looping، فائل سے ایک کردار کو پڑھنے کے لئے جاری کر رہے ہیں،
جب تک ہم حروف سے باہر چلانے کے ہے پڑھ.
اور جب ہم وہی کر رہے ہیں، ہم اندر معیار سے ایک ایک کردار پر انتظار کریں
ہر وقت آپ کو کمانڈ لائن میں کچھ ٹائپ کریں،
معیار سے ایک کردار میں اندر پڑھ رہا ہے
پھر putchar صرف چار ہم فائل سے معیار باہر پڑھا یہاں ڈال دیا جا رہا ہے.
تم وہی آدمی putchar لیکن کر سکتے ہیں یہ صرف معیار پر ڈال ہے، یہ کردار چھپائی ہے.
اسی خیال، تم نے ابھی بھی printf ("٪ C"، C) کر سکتے ہیں.
یہ ہمارے کام کا بڑا حصہ کیا جا رہا ہے.
>> آخری چیز جو ہم کرنا چاہتے ہیں کے لئے جا رہے ہیں ہے کہ صرف ہماری فائل میں fclose.
ہے کہ اگر آپ نہیں fclose، ایک میموری لیک ہے.
ہم فائل ہم اصل میں کھولا fclose کرنا چاہتے ہیں، اور مجھے لگتا ہے کہ یہ ہے.
اگر ہم کہ، میں نے پہلے ہی مسائل ہیں.
چلو دیکھتے ہیں.
کیا اس کے بارے میں شکایت کیا ہے؟
قسم 'struct _IO_FILE *' متوقع 'int' لیکن دلیل ہے.
ہم دیکھتے ہیں اگر وہ کام کریں گے.
صرف C99 میں اس کی اجازت ہے. Augh. ٹھیک ہے، hacker_typer ہے.
اب ہم زیادہ مفید وضاحت ملتا ہے.
تو اگھوشیت شناخت کنندہ 'normal_settings' کا استعمال کریں.
میں اسے normal_settings فون نہیں کیا. میں اسے current_settings سے ملاقات کی.
تو یہ سب تبدیل ہے.
اب دلیل گزر.
اب میں اس 0 کر دونگا.
ٹھیک ہے. / hacker_typer cp.c..
میں نے شروع میں سکرین واضح نہیں تھا.
لیکن تم نے گزشتہ مسئلہ سیٹ پر واپس دیکھو یہ دیکھنے کے لئے کہ کس طرح آپ کی سکرین صاف کرنے کے لئے کر سکتے ہیں.
یہ صرف کچھ حروف چھپائی
جبکہ یہ کر رہی ہے کہ میں کیا کرنا چاہتے ہیں.
ٹھیک ہے.
اور یہ کیوں 0 stdin کے بجائے کی ضرورت کے بارے میں سوچ
جس # 0 چاہیے وضاحت
کہ اس شکایت ہے -
جب میں نے کہا کہ فائل descriptors لیکن پھر تم نے بھی آپ کی فائل * اس سے پہلے،
ایک فائل ویورنک صرف ایک واحد عددی ہے،
جبکہ ایک فائل * چیزیں ایک مکمل جھوبڈ اس کے ساتھ منسلک ہے.
اسی سبب سے ہم بجائے stdin 0 کہنے کی ضرورت
یہ ہے کہ stdin ایک فائل * جو بات یہ ہے کہ فائل 0 ویورنک حوالہ کر رہا ہے کی طرف اشارہ ہے.
تو بھی یہاں جب میں نے fopen کرتے (argv [1]، میں ایک فائل * حاصل واپس آ گیا ہوں.
لیکن اس فائل * میں کہیں اس فائل کے لئے فائل ویورنک اسی بات یہ ہے.
اگر آپ کھلے کے لئے مرد صفحہ نظر آئے گا، تو میں لگتا ہے کہ آپ کو 3 شخص کھلا کرنا ہوگا - نہیں -
2 شخص کھلی - جی ہاں.
اگر آپ کو کھلی کے لئے صفحہ پر نظر، کھلی ایک نچلے درجے fopen کی طرح ہے،
اور یہ اصل فائل ویورنک واپس آ گیا ہے.
fopen اوپن کے سب سے اوپر پر سامان کا ایک گروپ ہے،
واپس لوٹنے صرف یہ ہے کہ فائل ویورنک ایک پوری فائل * پوائنٹر واپس کرنے کے بجائے جو
اندر جو ہماری چھوٹی فائل ویورنک ہے.
فائل * بات سے مراد میں تو معیاری
جبکہ 0 بذات خود فائل ویورنک معیار ہے.
>> سوال؟
[ہنسی] اس کے ذریعے دھماکے سے اڑا دیا.
ٹھیک ہے. ہم کیا کر رہے ہیں. [ہنسی]
>> [CS50.TV]