• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
تعداد مطالب : 351
تعداد نظرات : 75
زمان آخرین مطلب : 6094روز قبل
کامپیوتر و اینترنت
آموزش زبان C بخش شصت چهارم
اگر لازم باشد كه داده ها با فرمت خاصي در فايل نوشته و يا از آن خوانده شوند
مي توان از دو تابع ()fprintf و ()fscanf استفاده نمود . اين دو تابع دقيقا"
كار توابع ()printf و ()scanf را در ورودي خروجي معمولي ( غير از فايل )
انجام مي دهند . الگوي اين توابع در فايل stdio.h قرار داشته و به صورت زير
مي باشند :
int fprintf( FILE *fp/ "*control_string/..."/ char arg/)...
int fscanf( FILE *fp/ "*control_string/..."/ char arg/)...
در الگوي فوق ، fp اشاره گري است كه مشخص ميكند اعمال اين توابع بايد بر روي
چه فايلي انجام شود . control-srstring مشخص مي كند كه داده ها (args) بايد با
چه فرمتي نوشته و يا خوانده شوند .

مثال : برنامه اي كه يك رشته و يك عدد صحيح را از ورودي خوانده و آنرا در يك
فايل مي نويسد و سپس از اين فايل خوانده و در صفحه نمايش چاپ مي كند .
#include "stdio.h"
#include "stdlib.h"
#include "io.h"

void main(void)
{
FILE *fp;
char s[80] / number[10];
int t;
if((fp=fopen("test"/"w"))==NULL)
{
printf("cannot open file \n" );
exit(1 );
}
printf("\n enter a string: ");
gets(s);
strcat(s/"\n");
printf("\n enter anumber:");
gets(number);
t=atoi(number);
fprintf(fp/"%s%d"/s/t );
fclose(fp );
if((fp=fopen("test"/"r"))==NULL)
{
printf("cannot open file\n");
exit(1);
}
fscanf(fp/"%s%d"/&s/&t);
printf("\nstring=%s/digit=%d"/s/t);
}
نمونه اي از خروجي برنامه مثال بالا :
enter a string:hello!
enter a number:123
string=hello! / digit=123
در مورد تابع ()fprintf و ()fscanf بايد توجه داشت كه عليرغم اينكه ورودي
خروجي بااين دو تابع آسان است اما اطلاعات به همان صورتي كه در صفحه نمايش ظاهر
مي شوند در فايل ذخيره مي گردند . بعنوان مثال ، عدد 267 كه در صفحه نمايش ، 3
بايت را اشغال مي كند اگر توسط تابع ()fprintf بر روي فايل نوشته شود نيز 3
بايت را اشغال خواهد كرد ( توجه داريم كه عدد 267 يك عدد صحيح است و مي تواند
در دو بايت ذخيره شود ) . اين بدين معني است كه هر رقم بصورت كاراكتر تلقي
مي گردد . اگر اين عدد توسط تابع ()fscanf از روي فايل خوانده شود ، بايد عمل
تبديل كاراكتر به عدد صورت گيرد كه مستلزم صرف وقت است . براي جلوگيري از اين كه از دو تابع ()fread و ()fwrite استفاده گردد .
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:23
کامپیوتر و اینترنت
آموزش زبان C بخش شصت سوم
بافر ، حافظه اي است كه به فايل ها اختصاص مي يابد تا اعمال ورودي خروجي
بر روي آنها با سرعت بيشتري انجام گيرد. در حين خروج از برنامه خوب است كه جهت
اطمينان بيشتر ، به ماشين دستور داد تا كليه داده هاي موجود در بافرها را به
فايل مربوطه منتقل مي نمايد. براي اين منظور مي توان از تابع ()fflush استفاده
نمود . اگر كار اين تابع با موفقيت انجام شود ، مقداري كه توسط آن برگردانده
مي شود برابر با صفر وگرنه برابر با EOF خواهد بود ( EOF ماكرويي است كه در
فايل stdio.h تعريف شده است ) . الگوي تابع ()fflush در فايل stdio.h قرار
داشته و بصورت زير است : int fflush( FILE *fp)

در الگوي فوق ، fp فايلي را مشخص ميكند كه تابع ()fflush بايد بر روي آن عمل
نمايد . اگر fp ذكر نشود تابع ()fflush بر روي كليه فايل هايي كه بعنوان خروجي
باز شده اند عمل مي كند . بعنوان مثال ، دستور (f)fflush موجب مي شود تا كليه به فايل با اشاره گر f ، در اين فايل نوشته شوند .
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:23
کامپیوتر و اینترنت
آموزش زبان C بخش شصت دوم
براي حذف فايل هاي غيرضروري مي توان از تابع ()remove استفاده كرد . الگوي
اين تابع در فايل stdio.h قرار داشته و بصورت زير است : int remove( char *filename)

در الگوي فوق filename بنام فايلي كه بايد حذف شود ، اشاره مي كند. اگر عمل
تابع ناموفقيت انجام شود مقدار صفر وگرنه مقداري غير از صفر برگردانده خواهد
شد .

مثال : برنامه اي كه نام فايلي را بعنوان آرگومان پذيرفته و آنرا حذف ميكند.
#include "stdio.h"
#include "stdlib.h"

main(int argc / char *argv[])
{
char str[80] ;
if(argc!=2)
{
printf("\n you must type a file name!\n" );
exit(1 );
}
printf("erase %s( y/n:)"/argv[1]);
gets(str );
if(toupper(*str)=='y')
if(remove(argv[1]))
{
printf("cannot erase file\n");
exit(1);
}
}
نمونه اي از اجراي برنامه مثال بالا :
E:\TC>9-6 test.x
erase test.x(y/n:)y

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:23
کامپیوتر و اینترنت
آموزش زبان C بخش شصت یکم
در حين انجام كار با فايل ها ممكن است خطايي رخ دهد . بعنوان مثال ، عدم
وجود فضاي كافي براي ايجاد فايل ، آماده نبودن دستگاهي كه فايل بايد در آنجا
تشكيل گردد و يا مواردي از اين قبيل منجر به بروز خطا مي شوند . با استفاده از
تابع ()ferror مي توان از بروز چنين خطايي مطلع گرديد . الگوي تابع ()ferror
در فايل stdio.h قرار داشته و بصورت زير است : int ferror( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
فايلي عمل كند. اين تابع يك تابع منطقي است . بدين معني كه اگر خطايي در رابطه
با فايل ها رخ داده باشد اين تابع ارزش " درستي " وگرنه ارزش " نادرستي " را
برمي گرداند . براي تشخيص خطا در كار با فايل ها ، بلافاصله پس از هر فعلي كه
روي فايل انجام مي شود بايد از اين تابع استفاده نمود .

مثال : برنامه اي كه كاراكترهاي tab را از فايل حذف كرده و بجاي آن به تعداد
كافي فضاي خالي (blank) قرار مي دهد . اسامي فايل هاي ورودي و خروجي از طريق
آرگومان به برنامه وارد مي شود .
#include "stdio.h"
#include "stdlib.h"

#define TAB_SIZE 8
#define OUT 1
#define IN 1
void err(int );
void main(int argc / char *argv[])
{
FILE *in / *out;
int tab / i ;
char ch ;
if(argc!=3)
{
printf("\n incorrect number of");
printf(" parameters" );
printf("\n\t press a key... " );
getch )(;
exit(1 );
}
in=fopen(argv[2] / "wb" );
if( in==NULL)
{
printf("\n cannot open");
printf(" output file." );
printf("\n\t press a key... " );
getch )(;
exit(1 );
}
tab=0;
do {
ch=getc(in );
if( ferror(in))
err(IN );
if(ch=='\t')
{
for( i=tab ; i < 8 ; i++)
{
putc(' ' / out );
if( ferror(out))
err(OUT );
}
tab=0 ;
}
else
{
putc(ch / out );
if( ferror(out))
err(OUT );
tab ++ ;
if( tab==TAB_SIZE ||
ch=='\n' || ch=='\r')
tab=0;
}
}while( !feof(in ));
fclose(in );
fclose(out );
}
void err(int eror)
{
if( eror==IN)
printf("\n error on input file.");
else
printf("\n press a key... ");
getch )(;
exit

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:22
کامپیوتر و اینترنت
آموزش زبان C بخش شصتم
در مثالهايي كه تاكنون مطرح گرديد، فايل يا فقط بعنوان وسيله ورودي استفاده
گرديد و يا فقط بعنوان وسيله خروجي ، در اين قسمت مشاهده خواهد شد كه چگونه
ميتوان يك فايل را هم بعنوان وسيله ورودي و هم بعنوان وسيله خروجي مورداستفاده
قرار داد. براي اين منظور كافي است در تابع ()fopen بجاي mode از يكي از عبارات r+
يا r+tا ( باز كردن فايل text موجود بعنوان ورودي و خروجي ) ، w+يا w+tا
( ايجاد يك فايل text بعنوان ورودي و خروجي ) ، a+يا a+tا ( ايجاد فايل text و
يا باز كردن فايل text موجود ، بعنوان ورودي و خروجي ) ، r+b ( باز كردن فايل
باينري موجود ، بعنوان ورودي و خروجي ) ، w+b ( ايجاد يك فايل باينري بعنوان
ورودي و خروجي ) و ياa+b ( ايجاد و يا بازكردن فايل موجود باينري بعنوان ورودي
و خروجي ) استفاده نمود . بعنوان مثال ، دستورات زير را در نظر بگيريد :
fp1= fopen( "test.dat"/ "w+b");( 1)
fp2= fopen( "sample.dat"/ "r+b");( 2)
fp3= fopen( "test2.dat"/"a+t");( 3)
دستور (1) ، فايلي بنام test.dat را از نوع باينري و بصورت ورودي و خروجي
باز مي كند كه اشاره گر fp1 به آن اشاره مي كند . اگر فايل test.dat قبلا" وجود
داشته باشد محتويات قبلي آن از بين خواهند رفت .دستور(2)، فايلي بنام sample.dat
را كه اكنون بر روي درايو جاري وجود دارد از نوع باينري و بصورت ورودي و خروجي
باز مي كند . اگر فايل sample.dat بر روي درايو جاري وجود نداشته باشد ، پيام
خطايي صادر خواهد شد . دستور (3) ، فايلي بنام test2.dat را از نوع text و به
صورت ورودي و خروجي باز مي كند . اگر فايل test2.dat قبلا" وجود نداشته باشد
ايجاد خواهد شد و اگر وجود داشته باشد اطلاعات قبلي آن محفوظ بوده و اطلاعات جديد
به انتهاي آن اضافه خواهد شد .
در حين كار با فايل ها ( نوشتن اطلاعات بر روي آنها و يا خواندن اطلاعات از
آنها ) براي برگشت به ابتداي فايل ( تغيير " موقعيت سنج فايل " طوري كه ابتداي
فايل اشاره كند ) بايد فايل را بسته و مجددا" آن را باز نمود ( البته با توجه
به مطالبي كه تاكنون در مورد فايل ها گفته شد ) . اين مطلب در مثال هايي كه
تاكنون مطرح شد به چشم مي خورد . اصولا" شايد در فايل هايي كه فقط بعنوان خروجي
و يا فقط بعنوان ورودي باز مي شوند، نياز به برگشت به ابتداي فايل ( بدون بستن
و باز كردن مجدد آن ) احساس نشود، ولي اين امر در مورد فايل هاي ورودي و خروجي
به عنوان يك نياز مطرح است . براي اين منظور از تابعي بنام ()rewind استفاده
مي گردد . الگوي تابع ()rewind در فايل stdio.h قرار داشته و بصورت زير است : void rewind( FILE *fp)

در الگوي فوق ، fp به فايلي اشاره مي كند كه " موقعيت سنج " آن بايد به
ابتداي فايل اشاره نمايد .

مثال : برنامه اي كه رشته هايي را از ورودي خوانده و در يك فايل text قرار
مي دهد و سپس محتويات اين فايل را خوانده و به صفحه نمايش منتقل مي كند .
#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *fp ;
char str(80);
if((fp=fopen("test"/"w+"))==NULL)
{
printf("cannot open file\n" );
exit(1);
}
printf("enter a string");
printf("(Enter to quit:)\n");
while( 1)
{
gets(str);
if(!str[0])
break ;
strcat(str/"\n");
fputs(str/fp);
}
printf("\n the content of");
printf(" file is:\n\n");
rewind(fp);
fgets(str / 79 / fp);
while( !feof(fp))
{
printf("%s"/str);
fgets(str / 79 /fp );
}
fclose(fp );
}
نمونه اي از خروجي برنامه بالا :
( متن وارد شدهه از طريق صفحه كليد به فايل text ) enter a string(Enter to quit:)
<< top of file >>
this is an example for
read/write file.
<>

( متن موجود در فايل text كه به خروجي منتقل شده است ) the aontent of file is:

<< top of file >>
this is an example for
read/wri


خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:22
کامپیوتر و اینترنت
آموزش زبان C بخش پنجاه نهم
براي نوشتن رشته ها در فايل ، از تابع ()fputs و براي خواندن رشته ها از قايل
از تابع ()fgets استفاده مي گردد . الگوهاي اين دو تابع بصورت زير مي باشند : int fputs( const char *str/ FILE *fp)
char *fgets( char *str/ int length/ FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين توابع بايد بر روي چه
فايل هايي عمل كنند . در تابع ()fgets اشاره گر str به رشته اي اشاره مي كند كه
بايد در فايل نوشته شود . اين اشاره گر در تابع ()fputs به رشته اي اشاره مي كند
كه اطلاعات خوانده شده از فايل در آن قرار مي گيرند . length طول رشته اي را كه
بايد از فايل خوانده شود مشخص مي كند . نحوه عمل تابع ()fgets به اين صورت است
كه :
از ابتداي فايل شروع به خواندن مي كند تا به انتهاي يك خط برسد و يا رشته اي
به طول length كاراكتر را از فايل بخواند. برخلاف تابع ()gets، در تابع ()fgets
كاراكتري كه انتهاي خط را مشخص مي كند جزئ رشته اي خواهد بود كه اين تابع از
فايل مي خواند .

مثال : برنامه اي كه رشته هايي رااز ورودي ( صفحه كليد ) خوانده و در يك فايل
قرار مي دهد . از آنجايي كه تابع ()gets كاراكتري كه پايان خط را مشخص مي كند
به رشته اضافه نمي كند ، در حين نوشتن بر روي فايل اين كاراكتر به رشته خوانده
شده اضافه مي شود . براي خاتمه برنامه كافي است به جاي رشته ، فقط كليد enter
وارد شود .
#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *fp ;
char str[80];
if((fp=fopen("test"/"w"))==NULL)
{
printf("cannot open file\n" );
exit(1);
}
printf("enter a string");
printf("(ENTER to quit:)\n");
while( 1)
{
gets(str);
if(!str[0])
break ;
strcat(str/"\n");
fputs(str/fp);
}
fclose(fp );
}
نمونه اي از اجراي برنامه مثال بالا :
enter a string(ENTER to quit:)
in the name of god.
this is a sample file
for string i/o.
bottom of

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:21
کامپیوتر و اینترنت
آموزش زبان C بخش پنجاه هشتم
براي نوشتن يك كاراكتر در فايل ، از توابع ()putc و ()fputc استفاده ميشود.
طريقه استفاده از اين دو تابع يكسان است . تابع ()putc در گونه هاي جديد C و
()fputc در گونه هاي قديمي C وجود داشته است . چون تابع ()putc به صورت ماكرو
تعريف شده است سرعت عمل آن بالا است . لذا سعي ما در اين است كه از تابع ()putc
استفاده شود . الگوي تابع ()putc بصورت زير است : int putc( int ch/FILE *fp)

در الگوي فوق ، ch كاراكتري است كه بايد در فايل نوشته شود و fp اشاره گري
از نوع فايل است كه مشخص مي كند، كاراكتر موردنظر بايد در چه فايلي نوشته شود.
براي خواندن كاراكترها از فايل ، ميتوان از دو تابع ()getcو()fgetc) استفاده
نمود . نحوه بكارگيري اين دو تابع يكسان است . تابع ()fgetc در گونه هاي قديمي C
و ()getc در گونه هاي جديد C وجود دارد . چون تابع ()getc بصورت ماكرو پياده
سازي شده است از سرعت بيشتري برخوردار است . لذا ما سعي در استفاده از تابع
()getc داريم . الگوي اين تابع بصورت زير است : int getc( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند كاراكتر مورد نظر از كدام
فايل بايد خوانده شود .
در مورد خواندن و نوشتن داده ها بر روي فايل بايد به نكاتي توجه داشت : 1
وقتي كاراكترهايي بر روي فايل نوشته مي شوند بايد مكان بعدي كه ، كاراكتر
آتي در آنجا قرار مي گيرد مشخص باشد . همچنين وقتي كه كاراكترهايي از فايل
خوانده ميشوند بايد مشخص باشد كه تاكنون تا كجا فايل خوانده شده است و كاراكتر
بعدي از كجا بايد خوانده شود . براي برآوردن اين هدف ، سيستم از يك متغير بنام "
موقعيت سنج فايل " استفاده مي كند كه با هر دستور خواندن و يا نوشتن بر روي
فايل ، مقدار اين متغير بطور اتوماتيك تغيير مي كند تا موقعيت فعلي فايل را
مشخص نمايد . لذا عمل نوشتن بر روي فايل و عمل خواندن از روي آن از جايي شروع
مي شود كه اين متغير نشان مي دهد . 2
در هنگام خواندن داده ها از فايل بايد بتوان انتهاي فايل را تست نمود .
يعني در برنامه بايد بتوان اين تست را انجام داد كه ، اگر در حين خواندن داده ها
از فايل ، " موقعيت سنج فايل " به انتهاي فايل رسيد دستور خواندن بعدي صادر
نگردد . چرا كه در غير اينصورت ، سيستم پيام خطايي را مبني بر نبودن اطلاعات در
فايل صادر مي كند .
در حين خواندن داده ها از فايل text پس از رسيدن به انتهاي فايل تابع ()getc
يا ()fgetc علامت EOF را برمي گرداند. لذا در هنگام خواندن داده ها از فايل text
مي توان به عمل خواندن ادامه داد . تا اين كه كاراكتر خوانده شده برابر با EOF
گردد. درفايل باينري براي تست كردن انتهاي فايل ازتابع ()feof استفاده ميگردد.
الگوي اين تابع بصورت زير است : int feof( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
فايلي عمل كند . تابع ()fopen علاوه بر تشخيص انتهاي فايلهاي باينري براي تشخيص
انتهاي فايل هاي text نيز استفاده مي شود . اكنون به بررسي مثال هايي در مورد
فايل هاي text و باينري و چگونگي تست انتهاي اين دو نوع فايل مي پردازيم .

مثال 1: برنامه اي كه كاراكترهايي را از ورودي خوانده و در يك فايل text قرار
مي دهد ( آخرين كاراكتر ورودي $ است ) و سپس داده هاي موجود در اين فايل را
خوانده و به فايل ديگري منتقل مي كند .
#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *in/*out ;
char ch;
in=fopen("test.dat"/"w");
if( in==NULL)
{
printf("cannot open file\n");
exit(1);
}
do {
ch=getchar)(;
putc(ch/in);
}while(ch!='$');
fclose(in);
out=fopen("output.dat"/"w");
if(out==NULL)
{
printf("cannot open out file");
exit(1);
}
in=fopen("test.dat"/"r");
if(in==NULL)
{
printf("cannot open input file");
exit(1);
}
ch=getc(in);
while(ch!=EOF)
{
putc(ch/out);
ch=getc(in);
}
fclose(in);
fclose(out);
}
نمونه اي از اجراي برنامه مثال 1 :
this is a sample file.
this is a text file.
text file is slow.
end of file.
$

مثال 2: برنامه اي كه كاراكترهايي رااز صفحه كليد گرفته و در يك فايل باينري
قرار ميدهد و سپس كاراكترهاي موجود در اين فايل را خوانده و به يك فايل باينري
ديگر منتقل مي كند . اسامي فايل هاي ورودي و خروجي بعنوان آرگومان تابع اصلي
به برنامه وارد مي شوند .
#include "stdio.h"
#include "stdlib.h"

void main(int argc/char *argv[])
{
FILE *in/*out ;
char ch;
clrscr )(;
if(argc!=3)
{
printf("you forget enter");
printf(" file name\n");
exit(1);
}
in=fopen(argv[1]/"wb");
if( in==NULL)
{
printf("cannt open(first)");
printf(" output file \n");
exit(1);
}
do {
ch=getchar)(;
putc(ch/in);
} while(ch!='$');
fclose(in);
in=fopen(argv[1]/"rb");
if(in==NULL)
{
printf("cannot open input");
printf(" file");
exit(1);
}
out=fopen(argv[2]/"wb);
if(out==NULL)
{
printf("cannot open output");
printf(" file");
exit(1);
}
ch=getc(in);
while(!feof(in))
{
putc(ch/out);
ch=getc(in);
}
fclose(in);
fclose(out);
}

مثال 3: برنامه اي كه برنامه ديگري را بعنوان فايل ورودي ، پذيرفته و تعداد
پرانتزهاي باز و بسته و همچنين تعداد آكولادهاي باز و بسته را شمارش مي كند .
نام فايل ورودي بعنوان آرگومان تابع اصلي ، به برنامه وارد مي شود .
#include "stdio.h"
#include "stdlib.h"

void main(int argc/char *argv[])
{
FILE *in ;
char ch;
int openbraket=0 / closebraket=0;
int openbraket=0 / closparant=0;
if(argc!=2)
{
printf("\n the number of");
printf(" argument is incorrect.");
exit(0);
}
in=fopen(argv[1]/"r");

if( in==NULL)
{
printf("\n file cannot open!.");
exit(0);
}
ch=getchar)(;
while( ch != EOF)
{
if( ch=='{')
openbraket ++ ;
else if( ch=='}')
closebraket ++;
else if( ch=='(')
openparant ++;
else if( ch==')')
closparant ++;
ch=getc(in );
}
printf("\n the number of open ");
printf("braket is:%d"/openbraket);
printf("\n the number of close ");
printf("braket is:%d"/closebraket);
printf("\n the number of open ");
printf("parantheses is:");
printf("%d"/openparant);
printf("\n the number of close");
printf(" parantheses is:");
printf("%d"/closparant);
fclose(in);
}
نمونه اي از خروجي برنامه مثال 3 :
E:\TC>9-3 11.7.c

the number of open braket is:37
the number of close braket is:37
the number of open parantheses is:177

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:21
کامپیوتر و اینترنت

آموزش زبان C بخش پنجاه هفتم
تابع ()fopen براي باز كردن فايل مورداستفاده قرار گرفته و داراي الگوي زير
است : FILE *fopen(char *filename / *mode)

در الگوي فوق ، filename به رشته اي اشاره مي كند كه حاوي نام فايل و محل
تشكيل يا وجود آن است . نام فايل داده از قانون نامگذاري فايل برنامه تبعيت
مي كند و شامل دو قسمت : نام و انشعاب است كه بهتر است انشعاب فايل داده ، dat
انتخاب گردد . محل تشكيل يا وجود فايل مي تواند شامل نام درايو و يا هر مسير
موجود روي ديسك باشد . mode مشخص مي كند كه فايل چگونه بايد باز شود ( ورودي
خروجي و يا ... ) . مقاديري كه ميتوانند بجاي mode در تابع ()fopen قرار گيرند
همراه با مفاهيم آنها در جدول زير آمده اند . mode
مفهوم
(rt)r فايلي از نوع text را به عنوان ورودي باز مي كند
(wt)w فايلي از نوع text را به عنوان خروجي باز مي كند
(at)a فايل را طوري بازميكند كه بتوان اطلاعاتي را به انتهاي آن اضافه
نمود rb
فايلي از نوع باينري را به عنوان ورودي باز مي كند wb
فايلي از نوع باينري را به عنوان خروجي باز مي كند ab
فايل موجود از نوع باينري را طوري باز مي كند كه بتوان اطلاعاتي
را به انتهاي آن اضافه نمود
(r+t)r+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند
(w+t)w+ فايلي از نوع text را به عنوان ورودي و خروجي باز مي كند
(a+t)a+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند r+b
فايل موجود از نوع باينري را به عنوان ورودي و خروجي باز ميكند w+b
فايل از نوع باينري را به عنوان ورودي و خروجي باز مي كند a+b
فايل از نوع باينري را به عنوان ورودي و خروجي باز ميكند ( اين
فايل مي تواند قبلا" وجود داشته باشد ) .
جدول مقادير معتبر mode در تابع ()fopen

براي باز كردن فايل بايد يك اشاره گر از نوع فايل تعريف گردد تا به فايلي كه
توسط تابع fopen باز مي شود اشاره نمايد . اگر فايل به دلايلي باز نشود اين
اشاره گر برابر با NULL خواهد بود. بعنوان مثال ، دستورات زير را درنظر بگيريد: FILE *fp;( 1)
fp=fopen("A:test"/"w");( 2)

دستور (1)، متغير fp رااز نوع اشاره گر فايل تعريف مي كند و دستور (2) فايلي
بنام test را بر روي درايو A ايجاد مي نمايد ( چون حالت "w" ، فايل را به صورت
خروجي باز مي كند ) .
براي تشخيص اين كه آيا فايل با موفقيت باز شده است يا خير مي توان اشاره گر
فايل را با NULL مقايسه كرد. ( NULL ماكرويي است كه در فايل stdio.h تعريف شده
است و با حروف بزرگ بكار مي رود ) . اگر اشاره گر فايل برابر با NULL باشد بدين
معني است كه فايل باز نشده است :
if((fp=fopen("A:test"/"w"))==NULL)
{
printf("cannot open file \ n");
exit( 0);
خداییش اگر خوشت اومد نظر بده

دوشنبه 19/6/1386 - 22:20
کامپیوتر و اینترنت

آموزش زبان C بخش پنجاه ششم
هر فايل قبل از اين كه بتواند مورد استفاده قرار گيرد ، بايد باز گردد .
مواردي كه در حين باز كردن فايل مشخص مي شوند عبارتند از : 1
نام فايل 2
نوع فايل از نظر ذخيره اطلاعات (textيا binaryا) 3
نوع فايل از نظر ورودي خروجي ( آيا فايل فقط به عنوان ورودي است ، آيا
فقط بعنوان خروجي است يا هم بعنوان ورودي است و هم بعنوان خروجي ) .
يك فايل ممكن است طوري باز شود كه فقط عمل نوشتن اطلاعات بر روي آن مجاز
باشد . به چنين فايلي ، فايل خروجي گفته مي شود . اگر فايل طوري باز گردد كه
فقط عمل خواندن اطلاعات از آن امكان پذير باشد به چنين فايلي ، فايل ورودي گفته
مي شود . اگر فايل طوري باز شود كه هم عمل نوشتن اطلاعات بر روي آن مجاز باشد و
هم عمل خواندن اطلاعات از آن ، به چنين فايلي ، فايل ورودي و خروجي گفته ميشود.
اگر فايلي قبلا" وجود نداشته باشد ، در حين باز شدن بايد بعنوان فايل خروجي باز
شود . اگر فايلي قبلا" وجود داشته باشد و بعنوان خروجي باز گردد ، اطلاعات قبلي مي رود ، براي باز كردن فايل از تابع ()fopen استفاده مي گردد .

خداییش اگر خوشت اومد نظر بده

دوشنبه 19/6/1386 - 22:20
کامپیوتر و اینترنت

آموزش زبان C بخش پنجاه پنجم
منظور از سازمان فايل اين است كه اطلاعات در فايل چگونه ذخيره شده و سپس به
چه روش هايي مورد بازيابي قرار مي گيرند . يا بعبارت ديگر قانون حاكم بر نحوه
ذخيره و بازيابي داده ها و فايل را سازمان فايل گويند . حال به دو سازمان فايل
پرداخته مي شود : 1
سازمان فايل ترتيبي (sequential) . 2
سازمان فايل تصادفي (random) .
در سازمان فايل ترتيبي ، ركوردها به همان ترتيبي كه از ورودي خوانده ميشوند
در فايل قرار مي گيرند و در هنگام بازيابي ، به همان ترتيبي كه در فايل ذخيره
شده اند مورد دسترسي قرار مي گيرند . بعنوان مثال اگر صدمين ركورد فايل بخواهد
مورد دسترسي قرار گيرد، بايد 99 ركورد قبل از آن از فايل خوانده شوند. فايلهاي
ترتيبي معمولا" داراي يك فيلد كليد هستند . ( فيلد كليد ، فيلدي است كه بعنوان
شاخص ركورد مورد استفاده قرار ميگيرد ) و بر اساس آن ، مرتب ميباشند ( شكل 1 ).
بعنوان مثال در مورد دانشجويان ، شماره دانشجويي و در مورد كارمندان شماره
كارمندي ، فيلد خوبي براي شاخص فرد مي باشند .
شماره شناسايي نام موضوع درس نمره 12
Ahmad پاسكال 20 23
Ali پاسكال 15 34
Reza پاسكال 18 20 C Jafar 56

شكل (1) . نمونه اي از يك فايل ترتيبي

در سازمان فايل تصادفي ، به هر ركورد يك شماره اختصاص مي يابد . لذا اگر
فايل داراي n ركورد باشد ، ركوردها از 1تا nا شماره گذاري خواهند شد . وقتي كه
ركوردي در يك فايل با سازمان تصادفي قرار گرفت ، محل آن توسط يك الگوريتم پيدا
كننده آدرس ، كه با فيلد كليد ارتباط دارد مشخص مي شود . در اين صورت دو ركورد
با فيلد كليد مساوي ، نمي توانند در فايل تصادفي وجود داشته باشند . در سازمان
فايل تصادفي مستقيما" مي توان به هر ركورد دلخواه دسترسي پيدا كرد ( بدون اين
كه ركوردهاي قبل از آن خوانده شوند ) . شكل (2) نمونه اي از يك فايل تصادفي را
نمايش مي دهد .
شماره ركورد شماره شناسايي نام موضوع درس نمره 13
12 Ahmad پاسكال 20 20 C Jafar 56 20
24
23 Ali پاسكال 15 31
34 Reza پاسكال 18

خداییش اگر خوشت اومد نظر بده

دوشنبه 19/6/1386 - 22:19
مورد توجه ترین های هفته اخیر
فعالترین ها در ماه گذشته
(0)فعالان 24 ساعت گذشته