SinhVienIT.net HDTHBai01

Embed Size (px)

Citation preview

  • 8/19/2019 SinhVienIT.net HDTHBai01

    1/3

     HDTH môn H ệ đ iều hành Ôn l ại các thao tác trên tậ p tin

     Khoa Công Nghệ Thông Tin – Trườ  ng Đ H KHTN Tp.HCM 1

    Hướ ng dẫn thự c hành bài 1A.  Lý thuyết

    -  Kỹ năng lập trình C căn bản.- 

    Các k ỹ thuật lập trình liên quan đến tập tin.

    B. 

    Thự c hành1.

     

    Viết chươ ng trình (VCT) mã hóa nội dung của một tập tin & chươ ng trình giải mãtươ ng ứng.

    2.  VCT nhập vào tên của một file .EXE có sẵn và gọi thực hiện file .EXE đó.3.  VCT đọc & hiển thị nội dung 1 tập tin ra màn hình dướ i dạng Hex (như dạng hiển

    thị nội dung tập tin của phần mềm NC khi nhấn phím F3 rồi nhấn tiếp F4 – nhưngkhông cần xuất ra đườ ng thẳng đứng phân cách).

    Hướ ng dẫn:- 

    Các biến, hàm và k ỹ năng cần biết:

    o  Các biến, hàm liên quan đến tập tin:

     

    Con trỏ FILE: FILE * 

     

    Mở  file: FILE *fopen(const char *filename, const char *mode)

    •  filename: tên tập tin

    •  mode: r, w, a, r+, w+, a+, t(text), b(binary)

      Đọc dữ liệu: size_t fread(void *ptr, size_t size, size_t n, FILE* stream)

      Ghi dữ liệu: size_t fwrite(const void *ptr, size_t size, size_t n, FILE* stream)

    •  ptr: vùng đệm để đọc / ghi

    •  size: kích thướ c (theo byte) 1 item cần đọc / ghi

    •  n: số item cần đọc / ghi

    •  stream: con trỏ đến file sẽ đọc / ghi

    •  Trả về số item đã đượ c đọc / ghi

    o  Chỉ thị nhập / xuất cho hàm scanf / printf:

      Ký tự (char): %c

     

    Chuỗi (char []) có ký tự k ết thúc chuỗi: %s 

     

    Số nguyên (int):

    •  Dạng bát phân: %o 

    •  Dạng thập phân: %d 

    • 

    Dạng thập lục phân: %x (chữ thườ ng a, b…), %X (chữ hoa A, B…) 

    Số thực (float): %f  

     

    Số nguyên dài (long): %ld  long int

      Số thực dài (double): %lf   long float

     

    Định dạng số khoảng trống xuất:

    •  Cho số nguyên: %nd  n khoảng trống dành biểu diễn số nguyên (n âm:

    canh trái, n dươ ng: canh phải). Nếu n = 0 thì không canh lề. Ví dụ:

  • 8/19/2019 SinhVienIT.net HDTHBai01

    2/3

     HDTH môn H ệ đ iều hành Ôn l ại các thao tác trên tậ p tin

     Khoa Công Nghệ Thông Tin – Trườ  ng Đ H KHTN Tp.HCM 2

    o  int a = 123, b = 15;

    o  printf(“%-4d%5d”, a, b);

    o  Kết quả:  dành 4 khoảng trống và canh trái cho biến a; dành 5

    khoảng trống và canh phải cho biến b

    1 2 3 1 5•  Cho số thực: %n.md  n khoảng trống dành biểu diễn số thực tính luôn

    dấu chấm “.” (n âm: canh trái, n dươ ng: canh phải), m là số chữ số lẻ của

    số  thực đó. Lưu ý, nếu dùng cách này để  biểu diễn số  nguyên thì số 

    nguyên đó tự động thêm số  0 ở  đầu để  bảo đảm tổng số  chữ  số  của số 

    nguyên bằng m. Ví dụ:

    o  int a = 4; float b = 1.2, c = 2.126;

    o  printf(“%-5.3d%6.2f %7.2f ”, a, b, c);

    o  Kết quả: dành 5 khoảng trống, canh trái, 3 số để biểu diễn biến a;

    dành 6 khoảng trống, canh phải, 2 số lẻ để biểu diễn biến b; dành 7khoảng trống, canh phải, 2 số lẻ để biểu diễn biến c.

    0 0 4 6 . 2 0 2 . 1 3

    Bài 1:

    Gợ i ý: Có thể chọn phươ ng pháp mã hóa đơ n giản là xoay vòng (tăng hoặc giảm giá trị 

    mã ASCII của mỗi ký tự (mỗi byte) của tập tin muốn mã hóa. Muốn giải mã ta chỉ việc

    làm ngượ c lại quá trình trên. Ví dụ: tập tin có nội dung VIT CON

    Chọn cách mã hóa tăng mỗi lần 2 nấc: V (86) X (88) , I (73) K (75)…

    Giải mã sẽ làm ngượ c lại: X (88) V (86), K (75) I (73)…Chú ý:

    -  Vì bảng mã ASCII chỉ có 256 ký tự tươ ng ứng vớ i mã ASCII từ 0 đến 255. Do

    đó, ta phải chú ý mã hóa các ký tự có mã ASCII 254  0, 255  1… ứng vớ i

    cách mã hóa tăng 2 như trên.

    -  Muốn biết ký tự có mã ASCII là n là ký tự gì, ta giữ Alt rồi nhấn các chữ số của n

    đó rồi thả Alt ra. Ví dụ ta giữ Alt, nhấn 6, 5 rồi thả Alt ra, lập tức ta có chữ A vì

    mã ASCII của ký tự A là 65.

    -  Công thức gợ i ý:

    Mã ASCII của ký tự đã mã hóa = (Mã ASCII của ký tự cần mã hóa + n) % 256.n > 0 : tăng, n < 0: giảm

    Bài 2:

    Sử dụng một trong cách hàm sau để gọi thực hiện một lệnh ngoài DOS:

    -  int system(const char *command)   trong thư  viện PROCESS.H hoặc

    STDLIB.H

    -  Nhóm lệnh exec… hay spawn… trong thư viện PROCESS.H

  • 8/19/2019 SinhVienIT.net HDTHBai01

    3/3

     HDTH môn H ệ đ iều hành Ôn l ại các thao tác trên tậ p tin

     Khoa Công Nghệ Thông Tin – Trườ  ng Đ H KHTN Tp.HCM 3

    Lư u ý: để gọi thực thi một tập tin .EXE thì chươ ng trình phải có một bộ nhớ  đủ lớ n. Để 

    chỉnh lại kích thướ c vùng nhớ  cho chươ ng trình trong BC++ 3.1 for DOS, ta làm như sau:

    Chọn menu Options > Compiler > Code generation… > Chọn Model Compact trở  lên.

    Bài 3:Đọc nội dung tập tin rồi xuất giá trị từng byte ra màn hình vớ i chỉ thị %x để xuất dạng

    Hex. Kết hợ p cách định dạng số khoảng trắng xuất để gióng cột cho thẳng hàng.