আমি কেন এই সি প্রোগ্রাম চালাতে পারি না?


12

আমি আমার প্রথম "প্রক্রিয়া" প্রোগ্রামটি চালানোর চেষ্টা করছি, তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

./fork.c: line 4: syntax error near unexpected token `('
./fork.c: line 4: `int main()'

আমি নিশ্চিত যে কোডটি সঠিক:

 #include <sys/types.h>
 #include <stdio.h>
 int main() {
     pid_t pid;
     printf("Hello fork()\n");
     switch(pid=fork())  {
         case -1: printf("Error by fork().....\n"); exit(0);
         case 0: printf("I'm the child process \n"); break;
         default: printf("I'm the dad \n"); break;
     }
  exit(0);
}

কি সমস্যা?


15
পরে আপনার নিজের স্বার্থপরতার জন্য, "বিরতি" দিন; "কেস -1:" লাইনে। আপনি পরে এটির জন্য নিজেকে ধন্যবাদ জানাতে হবে। এছাড়াও, চাইল্ড প্রসেসিতে কল করুন _exit (0), এবং পিতামাতার কল প্রস্থান (0)।
ব্রুস এডিগার

4
@ ব্রুসইডিগার কেন দরকার _exit? যে কোনও ক্লিনআপ নিবন্ধিত হয়েছে তাতে কী সমস্যা?
অরেঞ্জডগ

4
প্রস্থান (0) stdout এবং stderr ফ্লাশ করবে। _ প্রস্থান (0) করবে না। আপনার প্রোগ্রামটি কাঁটাচামচ () ব্যবহার করে এবং শিশু কলটি প্রস্থান (0) করলে স্টাবডাউটে কিছু বাইট থাকলে আপনি ডাবল আউটপুট দিয়ে শেষ করতে পারেন। কারণ আপনি শিখছেন যে কীভাবে কাঁটাচামড়া () কাজ করে কেন নিজেকে বিভ্রান্ত করবে?
ব্রুস এডিগার

@ ব্রুসইডিগার শেখা কীভাবে fork()কাজ করে তা শেখার অন্তর্ভুক্ত যা এটি বাফার আউটপুটটি অনুলিপি করতে পারে। যুক্তিসঙ্গত জটিল সিস্টেমে কল হওয়ায় শেখার প্রক্রিয়াটিতে কিছু বিভ্রান্তি সম্ভবত প্রয়োজন।
অরেঞ্জডগ

উত্তর:


67

আপনি শুধু চালাতে পারবেন না ./fork.c। এটি কোনও প্রোগ্রাম নয়; এটি একটি প্রোগ্রামের উত্স । ব্যবহার ./অনুমান যে ফাইল একটি স্ক্রিপ্ট (যা তা না হয়) এবং সে অনুযায়ী একইরূপে।

তবে অন্য উত্তরে যেমন উল্লেখ করা হয়েছে, সেখানে সংকলক রয়েছে ( টিনি সি কম্পাইলারের মতো ) যা সি কোডটি স্পষ্টভাবে সংকলন না করে এক্সিকিউট করতে পারে।

যেহেতু এটি একটি সি প্রোগ্রাম, আপনাকে প্রোগ্রামটি সংকলন করতে হবে। cc -o fork fork.cতাহলে চেষ্টা করুন ./fork; এটি এখানে কাজ করে।


এবং যদি লিনাক্সে থাকে তবে এটি সম্ভবত সিসি নয়, জিসিসি।
লিনাকিনিও

6
বেশিরভাগ লিনাক্স সিস্টেমে @ লিনাক্সিস, এটির ccএকটি প্রতীকী লিঙ্ক gcc
রেনান

জানা ভাল. যদিও এটি স্যালারিসের মতো সিস্টেমে অন্য কিছুকে নির্দেশ করে, তাই না?
লিনাকিনিও

1
সোলারিসের কয়েকটি বাক্স এবং একটিতে এবং অন্যটিতে /usr/bin/ccলিঙ্কগুলি সন্ধান করেছে। নির্বিশেষে, এটি এখনও একটি সি সংকলক। /opt/SUNWspro/bin/cc/opt/sunstudio12.1/bin/cc
অরেঞ্জডোগ

1
এবং এটি এইচপিউক্স বক্সে রয়েছে /opt/ansic/bin/cc
অরেঞ্জডগ

23

এটি কোনও প্রোগ্রাম নয়, এটি একটি প্রোগ্রামের উত্স কোড।

সি একটি সংকলিত ভাষা, এর অর্থ এটি চালানোর আগে অবশ্যই এটি মেশিন-পঠনযোগ্য নির্দেশিকায় "সংকলন" করা উচিত। আপনি যেমন সি ব্যবহার করছেন, "সি সংকলক" ( cc) এটি করতে পারে।

cc -o fork for.c   # compile the code
chmod +x fork      # ensure it it executable
./fork             # run the compiled program

আপনি একাধিক উত্স ফাইল এবং বাহ্যিক গ্রন্থাগারগুলি ব্যবহার করে আরও জটিল প্রোগ্রামগুলিতে এগিয়ে যাওয়ার সাথে সাথে আপনি সম্ভবত "জিএনইউ সংকলক সংগ্রহ" ( gcc) ব্যবহার করতে এবং makeউত্স কোডটিকে কীভাবে কার্যকর কার্যকর হিসাবে রূপান্তর করতে পারেন তা বর্ণনা করতে পারেন।

এই প্রশ্নের স্ক্রিপ্টগুলির মধ্যে পার্থক্য (যেমন আপনি আপনার উত্স কোডটি ব্যবহার করার চেষ্টা করছেন) এবং সংকলিত প্রোগ্রামগুলির বিভিন্ন তথ্য রয়েছে।


"সংকলক" যদি সরঞ্জামটির নামের অংশ হয় তবে আমি এটিকে যুক্তিযুক্তভাবে সুস্পষ্ট বলব।
অরেঞ্জডোগ

কেবলমাত্র একটি নোট যে আমি যে সরঞ্জামগুলির নামকরণ করেছি সেগুলি কেবলমাত্র উপলব্ধ নয়, তবে সম্ভবত এটি কোনও জিএনইউ / লিনাক্স সিস্টেমে ডিফল্টরূপে উপলব্ধ এবং ব্যাপকভাবে ব্যবহৃত হতে পারে।
অরেঞ্জডগ

4
"অবশ্যই" শব্দটি সম্পর্কে, tcc( ক্ষুদ্র সি কম্পাইলার ) সি কোডটি স্পষ্টভাবে সংকলন না করেই কার্যকর করতে পারে। pastebin.com/5FZiMpEn (সম্পাদিত মন্তব্য করে এটি পুনরায় যোগ দুঃখিত অর্ডার তালগোল পাকানো জন্য।।)
manatwork
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.