Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Nắm vững lệnh gọi hệ thống read() trong C:Hướng dẫn toàn diện

Ngôn ngữ C có một số hàm cho phép đọc tệp, được sử dụng phổ biến nhất là hàm read() và fread(). Ngôn ngữ này cũng cung cấp các phương thức đọc từng ký tự bằng các hàm như getchar().

Điều quan trọng là phải biết các hàm xử lý tệp, phương thức gọi, đối số đầu vào và đầu ra, v.v. để sử dụng chúng một cách trôi chảy vì chúng là tài nguyên sẵn có để lập trình viên lưu trữ và xử lý thông tin được lưu trữ trong hệ thống.

Trong bài viết Linuxhint này, bạn sẽ tìm hiểu cách sử dụng hàm read() để đọc tệp.

Chúng tôi sẽ giải thích mọi thứ về ella này, cú pháp của nó, lệnh gọi phương thức, đối số đầu vào và đầu ra, loại dữ liệu mà chúng chấp nhận và cách khai báo chúng đúng cách.

Sau đó, chúng tôi áp dụng những gì đã học bằng cách đưa việc sử dụng tính năng này vào các ví dụ thực tế.

Để bạn có thể hiểu đầy đủ về cách sử dụng hàm read(), chúng tôi đã thêm một phần đặc biệt mô tả tất cả các lỗi có thể xảy ra khi sử dụng hàm này, cũng như cách phát hiện và nhận dạng chúng, để bạn có các kỹ thuật cần thiết để giải quyết nhanh chóng trong trường hợp xảy ra lỗi.

Cú pháp hàm Read() trong ngôn ngữ C

 
size_t read(int fd, void *buf, size_t  count);
 

Mô tả hàm Read()

Hàm read() đọc nội dung của tệp đang mở được chỉ định bởi bộ mô tả của nó trong đối số đầu vào “fd”. Hàm này đọc và sao chép nội dung của file vào bộ đệm được trỏ tới bởi “buf” với số byte đếm được. Mã định danh “fd” là một số nguyên được trả về dưới dạng kết quả của hàm open() khi tệp được mở.

Nếu hàm read() trả về thành công, nó sẽ trả về số byte đã đọc. Kết quả bằng 0 có nghĩa là tệp đã được đọc đến cuối và -1 có nghĩa là đã xảy ra lỗi.

Lỗi cụ thể có thể được xác định bằng cách truy xuất mã của nó từ biến toàn cục “errno”. Sau này, bạn sẽ tìm thấy phần mô tả các lỗi có thể xảy ra khi sử dụng hàm read() và các kỹ thuật để phát hiện và xác định chúng.

Hàm read() được khai báo trong tiêu đề “unistd.h”. Để sử dụng nó, bạn phải đưa tệp này vào mã của mình như sau:

Cách đọc tệp bằng hàm Read()

Trong ví dụ này, chúng tôi sẽ giải thích cách mở và đọc tệp bằng hàm open() và read().

Với mục đích này, trước đây chúng tôi đã tạo một tệp văn bản có tên “example.txt” thông qua Trình quản lý Linux và lưu nó trong thư mục “Tài liệu”. Sau đó, chúng tôi viết đoạn đầu tiên của bài viết này vào đó.

Bước đầu tiên trong việc phát triển mã để đọc tệp là bao gồm các tiêu đề cần thiết và tạo hàm main() trả về giá trị trống. Chúng tôi xác định số nguyên “fd” trong đó đóng vai trò là bộ mô tả tệp, bộ đệm 1024 ký tự được gọi là “buff” nơi lưu trữ thông tin được đọc bởi read(). Đường dẫn mảng lưu trữ đường dẫn và tên của tệp mà chúng ta muốn đọc.

Sau khi xác định các biến cần thiết, chúng ta gọi hàm open() để mở file. Chúng ta gọi hàm này bằng cách chuyển mảng đường dẫn có đường dẫn và tên của tệp làm đối số đầu vào đầu tiên và chỉ định cờ O_RDONLY làm đối số thứ hai. Là đối số đầu ra, chúng ta chuyển số nguyên “fd” trong đó open() trả về bộ mô tả mà sau đó chúng ta sử dụng để đọc vào tệp.

Sau khi mở tệp, chúng ta sẽ đọc nội dung của nó bằng cách gọi hàm read() và chuyển bộ mô tả “fd” làm đối số đầu tiên được hàm open() trả về. Đối số thứ hai, chúng ta chuyển con trỏ tới bộ đệm “buff”, nơi chúng ta lưu trữ nội dung cần đọc và cuối cùng là kích thước của bộ đệm, trong trường hợp này là 1024 byte.

Sau đó, chúng tôi sử dụng hàm printf() để hiển thị nội dung được lưu trữ trong buff trong bảng điều khiển lệnh. Đây là mã hoàn chỉnh cho ví dụ này:

#include
#include
#include
#include

int chính()
{  
   int fd;
   buff char[1024];
   char path[] ="Documents/example.txt";
   fd =open(path, O_RDONLY);
   đọc(fd, buff, 1024);
   printf("\n\n%s\n\n",buff);
   

Trong hình dưới đây, chúng ta thấy quá trình biên dịch và thực thi mã này. Như chúng ta có thể thấy, read() đặt toàn bộ nội dung của tệp “example.txt” vào “buff” và hàm printf() sẽ in nó ra bảng điều khiển lệnh:

Nắm vững lệnh gọi hệ thống read() trong C:Hướng dẫn toàn diện

Cách phát hiện và xác định các lỗi có thể xảy ra khi sử dụng hàm Read()

Việc sử dụng read() có thể tạo ra nhiều lỗi khác nhau. Khi điều này xảy ra, hàm này trả về kết quả bằng -1.

Cách dễ nhất để xác định xem có xảy ra lỗi hay không là sử dụng điều kiện “if” trong đó điều kiện có giá trị trả về là -1. Bây giờ, hãy xem cách bạn có thể sử dụng phương pháp này để xác định xem có xảy ra lỗi hay không:

int n;
n =đọc(fd, buff, 1024);
nếu (n ==-1){
     printf ("Đã xảy ra lỗi khi cố đọc tệp.");
     

Nếu hàm read() trả về có lỗi, nó sẽ chuyển sang câu lệnh “if” và in thông báo “Đã xảy ra lỗi khi cố đọc tệp”.

Khi xảy ra lỗi, mã số sẽ tự động được lưu trữ trong biến toàn cục “errno” được xác định trong tiêu đề “errno.h”. Mã này có thể được sử dụng để xác định lỗi đã xảy ra.

Sau đây là đoạn trích về các lỗi mà hàm read() có thể tạo ra và được xác định trong tiêu đề “errno.h”, cùng với mô tả ngắn gọn về từng lỗi và giá trị số nguyên liên quan:

Định nghĩaGiá trị trong không có lỗi LỗiĐẸP 11Thử lạiEBADF 9Số tệp không chính xácEDESTADDRREQ 89Yêu cầu địa chỉ đíchEFAULT 14Địa chỉ không chính xácEFBIG 27Tệp quá lớnEINTR 4Cuộc gọi hệ thống bị gián đoạnEINVAL 22Đối số không hợp lệEIO 5 Lỗi I/OEPERM 1Không được phép thực hiện thao tác

Cách dễ nhất để xác định lỗi là mở một công tắc trong đó biến “errno” là điều kiện nhảy và mỗi trường hợp là một định nghĩa lỗi.

Tiếp theo, chúng ta hãy xem một ví dụ trong đó chúng ta cố gắng nhập bộ mô tả bằng dấu âm, dẫn đến lỗi. Để xác định lỗi, chúng tôi sử dụng điều kiện “if” mà chúng tôi đã thấy trong đoạn mã trước. Để xác định nó, chúng tôi mở một công tắc có ba lỗi phổ biến nhất mà chức năng này có thể tạo ra.

#include
#include
#include
#include
#include

int chính()
{  
   int fd,n;
   buff char[1024];
   char path[] ="Documents/example.txt";
   fd =open(path, O_RDONLY);

   n =đọc(99999999, buff, 1024);
   nếu (n ==-1){
      chuyển đổi(lỗi){
    trường hợp EBADF:{
                  printf("Số tập tin sai. Lỗi:%i\n", errno);
                  nghỉ;}
    trường hợp EINVAL:{
                   printf("Đối số không hợp lệ. Lỗi:%i\n", errno);
                   nghỉ;}
    trường hợp EIO:{
                printf("Lỗi I/O . Lỗi:%i\n", errno);
                nghỉ;}
    }
 }

Như chúng ta có thể thấy trong hình dưới đây, hàm read() trả về lỗi khi một bộ mô tả không hợp lệ được truyền làm đối số đầu vào và giá trị được truy xuất từ biến “errno” được sử dụng làm điều kiện nhảy cho phép chúng ta xác định lỗi khi nhập trường hợp EBADF.

Nắm vững lệnh gọi hệ thống read() trong C:Hướng dẫn toàn diện

Kết luận

Trong bài viết Linuxhint này, chúng tôi đã hướng dẫn bạn cách sử dụng hàm read(), một trong những hàm phổ biến nhất được triển khai trong ngôn ngữ C để đọc tệp.

Chúng tôi đã xem xét cú pháp của nó và một phần mô tả hoạt động lý thuyết, các đối số đầu vào và đầu ra cũng như các kiểu dữ liệu của nó. Sau đó, chúng ta triển khai những gì đã học trong một ví dụ thực tế với mã và hình ảnh minh họa cách mở và đọc tệp bằng hàm open() và read().

Để có các phương tiện cần thiết nhằm khắc phục lỗi có thể xảy ra khi sử dụng chức năng này, chúng tôi đã thêm một phần đặc biệt giải thích các phương pháp mà ngôn ngữ C cung cấp để phát hiện và xác định lỗi.