با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند. در این جلسه قصد داریم توابع I / O در C و کار با فایل ها در C از جمله خواندن از فایل در c را مورد بحث قرار دهیم. اولین مبحث کار با فایل ها در C.
در این فصل دستگاه های ورودی و خروجی استاندارد که توسط زبان برنامه نویسی C مورد استفاده قرار می گیرند، توضیح داده شده است.
این فصل کار با فایل ها در C یعنی چگونگی ایجاد، باز و بستن فایلهای متنی یا فایل های باینری را برای ذخیره سازی داده ها به برنامه نویسان C آموزش می دهد.
یک فایل نشان دهنده توالی بایت است، صرف نظر از آن که یک فایل متنی یا یک فایل باینری باشد.
زبان برنامه نویسی C دسترسی به عملکردهای سطح بالا و همچنین سطوح پایین (سطح سیستم عامل) را برای رسیدگی به فایل در دستگاه های ذخیره سازی خود فراهم می کند.این فصل به شما در مورد کار با فایل ها در C می گوید.
شما می توانید از تابع ()fopen برای ایجاد یک فایل جدید یا برای باز کردن یک فایل موجود استفاده کنید.
این فراخوانی یک شی از نوع FILE را که شامل تمام اطلاعات لازم برای کنترل جریان است، راه اندازی می کند.
نمونه اولیه این فراخوانی تابع به شرح زیر است:
1 | FILE *fopen( const char * filename, const char * mode ); |
در اینجا، filename رشته ی حروف است که از آن برای نام فایل استفاده می کنید و حالت دسترسی می تواند یکی از مقادیر زیر باشد:
ردیف | حالت و توضیحات |
۱ | r یک فایل متنی موجود برای هدف خواندن باز می شود. |
۲ | w فایل متنی را برای نوشتن باز می کند. اگر آن وجود نداشته باشد، یک فایل جدید ایجاد می شود. در اینجا برنامه شما شروع به نوشتن مطالب از ابتدای فایل می کند. |
۳ | a یک فایل متنی برای نوشتن در حالت افزودن باز می شود. اگر آن وجود نداشته باشد، یک فایل جدید ایجاد می شود. در اینجا برنامه شما محتوا را در محتویات فایل موجود اضافه می کند. |
۴ | +r فایل متنی را برای خواندن و نوشتن باز می کند. |
۵ | +w فایل متنی را هم برای خواندن و هم برای نوشتن باز می کند. اگر فایل وجود داشته باشد. اول فایل را به صفر می رساند ، در غیر این صورت اگر فایل وجود نداشته باشد یک فایل ایجاد می کند. |
۶ | +a فایل متنی را هم برای خواندن و هم برای نوشتن باز می کند.اگر فایل وجود ندارد، این فایل را ایجاد می کند. خواندن از ابتد آغاز می شود، اما نوشتن فقط می تواند از انتهای محتوای موجود اضافه شود. |
اگر قصد دارید فایلهای باینری را مدیریت کنید، به جای موارد فوق از حالتهای دسترسی زیر استفاده کنید .
1 | "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b" |
برای بستن یک فایل از تابع ()fclose استفاده کنید. نمونه اولیه این تابع است:
1 | int fclose( FILE *fp ); |
تابع(-)fclose صفر در موفقیت و EOF را اگر خطایی در بستن فایل وجود داشته باشد برمی گرداند.
این تابع عملا هر اطلاعاتی را که در بافر فایل در حال پردازش است، از بین می برد.
فایل را بسته و حافظه مورد استفاده برای فایل را آزاد می کند.
EOF یک ثابت است که در header file stdio.h تعریف شده است.
برای خواندن و نوشتن یک فایل توابع مختلفی توسط کتابخانه استاندارد C ارائه شده ، کراکتر به کاراکتر یا در قالب یک رشته با طول ثابت .
در زیر ساده ترین راه برای نوشتن یک کاراکتر در یک فایل را مشاهده می کنید:
1 | int fputc( int c, FILE *fp ); |
تابع()fputcمقدار کاراکتر آرگومان c را توسط fp به رشته خروجی اشاره شده، می نویسد.
اگر عمل نوشتن موفقیت آمیز باشد مقدار صفر و در غیر این صورت EOF باز می گرداند.
در زیر ساده ترین تابع برای نوشتن کاراکترهای خاص آمده است.
1 | int fputs( const char *s, FILE *fp ); |
تابع()fputs رشته s را توسط fp به خروجی اشاره شده می نویسد.
این یک مقدار غیر منفی را با موفقیت برمی گرداند، به عبارتی اگر عمل نوشتن موفقیت آمیز باشد مقدار صفر و در غیر اینصورت ،در صورت بروز هر گونه خطا EOF برگشت داده می شود. شما می توانید از int fprintf(FILE *fp,const char *format, …) برای نوشتن یک رشته در یک فایل استفاده کنید. مثال زیر را امتحان کنید.
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); } |
هنگامی که کد بالا کامپایل شده و اجرا می شود، یک فایل جدیددر test.txt in /tmpایجاد می کند.
و دو خط را با استفاده از دو توابع مختلف می نویسد. اجازه دهید این فایل را در بخش بعدی بخوانیم.
قبل از اجرا مثال بالا مطمئن شوید که پوشه tmp وجو دارد.
اگر وجود نداشت آن را ایجاد کنید.در ادامه خواندن از فایل در c را داریم.
در زیر، ساده ترین راه برای خواندن یک کاراکتر از یک فایل است . خواندن از فایل در c :
1 | int fgetc( FILE * fp ); |
1 | char *fgets( char *buf, int n, FILE *fp ); |
سپس مقدار null را به منظور خاتمه دادن به رشته، به انتهای بافر buf اضافه می کند.
اگر تابع fgets() با یک کاراکتر خط جدید یا EOF رو به رو شود، عملیات خواندن را متوقف می کند.
iهمچنین فقط کاراکتر خوانده شده تا قبل از خط جدید یا EOF باز گردانده می شوند.
همچنین می توانید از تابع fscanf() نیز به منظور خواندن یک رشته از فایل استفاده کنید. الگوی این تابع را در زیر مشاهده می کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); } |
هنگامی که کد بالا کامپایل شده و اجرا می شود، فایل فایل ایجاد شده در بخش قبلی را می خواند و نتیجه ی زیر را تولید می کند:
1 2 3 4 | 1 : This 2: is testing for fprintf... 3: This is testing for fputs... |
بیایید کمی بیشتر در مورد آنچه اتفاق افتاده را در اینجا ببینید.
خب حالا I / O در C . دو تابع وجود دارد که می توانند برای ورودی و خروجی باینری
1 2 3 | size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FI |
هر دو این توابع باید برای خواندن و یا نوشتن بلوک های از حافظه (معمولا آرایه ها و ساختارها) استفاده شوند. به عبارت دیگر برای نوشتن محتویات یک آرایه یا ساختار درون یک فایل و همچنین برای خواندن این محتویات از فایل توابع فوق استفاده می شوند.
خب اینم از کار با فایل ها در C از جمله خواندن از فایل در c و نوشتن آن و I / O در C .امیدوارم لذت برده باشین. آموزش رو در جلسه بعد مباحث رو با پیش پردازنده در زبان C و ماکروهای از پیش تعریف شده و عملگرهای پیش پردازنده ادامه خواهیم داد. همراهمون باشید.