1 / 19

C Programming

C Programming. Lecture no. 9 Files System. การใช้ file ในภาษาซี. ฟังก์ชั่นต่างๆ ในการจัดการ file มีแนวคิดมาจากเรื่อง I / O stream ซึ่งเปรียบเสมือน character array ที่ยาวไม่มีที่สิ้นสุด โดย stream ที่ว่านี้สามารถ access ได้ดังนี้

paiva
Télécharger la présentation

C Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C Programming Lecture no. 9 Files System

  2. การใช้file ในภาษาซี ฟังก์ชั่นต่างๆในการจัดการfile มีแนวคิดมาจากเรื่องI/O stream ซึ่งเปรียบเสมือนcharacter array ที่ยาวไม่มีที่สิ้นสุด โดยstream ที่ว่านี้สามารถaccess ได้ดังนี้ - โดยใช้file pointers เป็นการจัดการระดับสูงหรือbuffered - โดยใช้file descriptors เป็นการจัดการในระดับต่ำหรือunbuffered 310322 C Programming

  3. ในกรณีของfile pointer คือpointer ที่ชี้ไปยังdata type FILE ซึ่งถูกกำหนดไว้ในstdio.h โดยเป็นstructure ที่เป็นที่เก็บรวบรวมข้อมูลที่เกี่ยวข้องกับfile นั้นเช่น - File descripter - ตำแหน่งปัจจุบันในbuffer - Pointers ไปยังbuffers - ในขณะนั้นfile กำลังถูกread หรือwrite อยู่หรือไม่ 310322 C Programming

  4. ในกรณีของfile pointer (2) • มีfile pointers อยู่ 3 ชนิดซึ่งมีอยู่ก่อนหน้านั้นแล้วได้แก่ - stdin - stdout - stderr • ทั้งนี้ก่อนที่file จะสามารถถูกread หรือwrite จะต้องใช้ฟังก์ชั่นในC library ชื่อfopen() เปิดfile ไว้ก่อนซึ่งมีlimit ว่าจะสามารถเปิดได้กี่files พร้อมๆกัน • หลังจากที่files ถูกใช้เสร็จแล้วfiles จะต้องถูกปิดโดยใช้ฟังก์ชั่น fclose() ซึ่งเป็นการเคลียร์file buffer และตัดconnection ไปยังfile นั้นออก 310322 C Programming

  5. การเปิดไฟล์ (Opening Files) ใช้ฟังก์ชั่นfopen() ซึ่งมีรูปแบบดังนี้ FILE *fopen( char *path, char *mode); ฟังก์ชั่นนี้มี 2 arguments ทั้ง 2 arguments เป็นpointer ไปยังcharacter strings โดยpointer แรกจะเก็บค่าaddress ของชื่อfile ที่จะถูกเปิดและpointer ที่ 2 เป็นaddress ของaccess mode 310322 C Programming

  6. ตารางต่อไปนี้แสดงความหมายของaccess mode ถ้าฟังก์ชั่นfopen() ทำงานสำเร็จจะreturn ค่าของfile pointer แต่หากทำงานไม่สำเร็จ (ไม่สามารถเปิดfile ได้) ฟังก์ชั่นจะreturn NULL 310322 C Programming

  7. การปิดfiles (Clossing files) เมื่อใช้files แล้วจะต้องปิดด้วยฟังก์ชั่นflose() ซึ่งมีรูปแบบดังนี้ int fclose( FILE *stream); ฟังก์ชั่นfclose() จะreturn ค่า 0 หากทำงานสำเร็จหากทำไม่สำเร็จจะreturn ค่าเป็นEOF 310322 C Programming

  8. ศึกษาการใช้fopen() และfclose() #include <stdio.h> int main(void) { FILE *fptr; fptr = fopen("ascii.c","r"); if(fptr != NULL){ printf("Hay I can open myself\n"); close(fptr); } else printf("Hi my source is lost\n"); return (0); } 310322 C Programming

  9. Character Input และOutput จากFiles • ในการอ่านcharacter จากinput stream ที่ถูกชี้โดยfile pointer สามารถใช้ฟังก์ชั่นgetc() และfgetc() ซึ่งมีรูปแบบของฟังก์ชั่นดังนี้ int fgetc(FILE *stream); int getc(FILE *stream); • โดยหากฟังก์ชั่นทำงานสำเร็จฟังก์ชั่นจะคืนค่าเป็นcharacter ในรูปแบบของinteger และหากทำงานไม่สำเร็จจะคืนค่าEOF กลับมาขอให้ดูวิธีการใช้ฟังก์ชั่นจากโปรแกรมต่อไปนี้ 310322 C Programming

  10. #include <stdio.h> main() { int ch; FILE *fptr; fptr = fopen("hr12b.c","r"); if(fptr != NULL){ printf("Hay I can open myself\n"); while ((ch = getc(fptr))!=EOF){ printf("%c",ch); } close(fptr); } else printf("Hi my source is lost\n"); } 310322 C Programming

  11. ฟังก์ชั่นสำหรับการwrite character ไปสู่file • ฟังก์ชั่นสำหรับการwrite character ไปสู่file 2 ฟังก์ชั่นดังนี้ int fputc(int c, FILE *stream); int putc(int c, FILE *stream); • ฟังก์ชั่นทั้ง 2 มี 2 arguments โดยargument แรกเป็นcharacter ในรูปแบบของinteger ส่วนargument ที่ 2 เป็นfile pointer • ถ้าฟังก์ชั่นทำงานสำเร็จจะreturn character ที่output ไปในรูปแบบของinteger หากทำงานไม่สำเร็จจะคืนค่าEOF 310322 C Programming

  12. การcopy file #include <stdio.h> main() { int ch; FILE *infile, *outfile; infile = fopen("hr12c.c","r"); outfile = fopen("hr12c.copy","w"); if((infile == NULL)||(outfile == NULL)) printf("File open error\n"); } 310322 C Programming

  13. การcopy file (2) else { ch = fgetc(infile); while (ch != EOF) { fputc((char)ch, outfile); ch = fgetc(infile); } } if (infile != NULL) fclose(infile); if (outfile != NULL) fclose(outfile); } 310322 C Programming

  14. Line Oriented Input และOutput กับFiles มีฟังก์ชั่นที่เกี่ยวข้องดังต่อไปนี้ int fputs(const char *s, FILE *stream); char *fgets(char *s, int size, FILE *stream); 310322 C Programming

  15. ตัวอย่าง #include <stdio.h> #define SIZE 100 main() { char *linein, *lineout; FILE *fp; fp = fopen("hr12d.c","r"); if (fp == NULL) printf("Cannot open file\n"); else 310322 C Programming

  16. ตัวอย่าง (2) do { lineout = fgets(linein,SIZE,fp); fputs(lineout,stdout); } while (*linein != EOF); close(fp); } โปรแกรมนี้มีอะไรผิดหรือเหตุใดจึงเกิดSegmentation fault ที่ผลรัน 310322 C Programming

  17. Formatted Input และOutput กับFiles ใช้ฟังก์ชั่นfprintf() และfscanf() ซึ่งทำงานเหมือนกับprintf() และscanf() ยกเว้นมีarguments ตัวแรกเป็นfile pointer รูปแบบของฟังก์ชั่นมีดังนี้ int fscanf( FILE *stream, const char *format, ...); int fprintf( FILE *stream, const char *format, ...); 310322 C Programming

  18. ตัวอย่าง #include <stdio.h> #define STRSIZE 1000 #define READ "r" void main() { FILE *fp; int wc = 0; int checkread; char word[STRSIZE]; fp = fopen("hr12e.c",READ); if (fp == NULL) fprintf(stderr, "Can't open file"); 310322 C Programming

  19. ตัวอย่าง (2) else { checkread = fscanf(fp,"%s",word); while (checkread != EOF) { wc++; checkread = fscanf(fp,"%s",word); } fprintf(stdout,"Number of words %d\n",wc); fclose(fp); } } 310322 C Programming

More Related