Cách sử dụng Viết cuộc gọi hệ thống trong C

How Use Write System Call C



Lệnh gọi hệ thống đóng vai trò là cổng chính giữa các chương trình và nhân hệ điều hành Linux. Mặc dù gần như chắc chắn bạn sẽ cần phải có một lệnh gọi hệ thống trong suốt sự nghiệp lập trình C của mình, cho dù bạn hướng đến năng suất đặc biệt hay một phong cách tính năng nhất định, kho lưu trữ Glibc hoặc các thư viện tiêu chuẩn khác được tìm thấy trong các bản phân phối Linux phổ biến sẽ đủ cho phần lớn các yêu cầu. Trong hướng dẫn này, chúng tôi sẽ thiết lập một khái niệm về lệnh gọi Hệ thống viết bằng ngôn ngữ C.

Cú pháp:

#bao gồm

ssize_tviết(int fd, const void*buf, số lượng size_t);

Trong cú pháp trên, dòng đầu tiên hiển thị thư viện cho các lệnh gọi hệ thống. Ở dòng thứ hai, fd là viết tắt của một bộ mô tả tệp thực sự là một số chỉ định tệp đang mở của một quy trình. Từ khóa * buf là viết tắt của từ đệm. Điều này chứa bất kỳ dữ liệu nào trong đó. Tiếp theo là đếm. Nó là số byte được ghi vào bộ mô tả tệp từ bộ đệm.







Cài đặt Điều kiện tiên quyết:

Để chạy bất kỳ mã ngôn ngữ C nào, trước tiên bạn phải cài đặt một số gói trong bản phân phối Linux. Nếu bạn muốn xem thêm thông tin liên quan đến lệnh gọi hệ thống ghi, bạn phải cài đặt gói manpages-dev để làm như vậy. Để mở thiết bị đầu cuối bằng phím tắt Ctrl + Alt + T. Sau khi mở nó, hãy viết lệnh apt install bên dưới, theo sau là từ khóa manpages-dev để cài đặt manpages.



$sudođúng cáchTải vềmanpages-dev



Sẽ mất một khoảng thời gian để cài đặt manpages. Chờ cho đến khi nó được hoàn thành.





Sau khi cài đặt, bạn có thể xem thông tin bổ sung về lệnh gọi hệ thống ghi thông qua lệnh man dưới đây trong shell.



$Đàn ông 2 viết

Trang đầu ra cho lệnh ghi được đưa ra bên dưới. Bạn có thể đọc thông tin về nó. Nhấn q để thoát khỏi thủ công.

Bây giờ đã đến lúc cài đặt gói Gcc trong hệ thống Linux của bạn để hoạt động ở ngôn ngữ C. Để làm điều đó, hãy mở shell và viết lệnh apt install bên dưới, theo sau là từ khóa gcc.

$sudođúng cáchTải về gcc

Trong khi đó, trong quá trình cài đặt, nó có thể yêu cầu bạn xác nhận hành động cài đặt này bằng cách nhấn y để tiếp tục và n để dừng nó. Vì vậy, hãy nhấn vào phím y và nhấn phím Enter.

Nó sẽ được cài đặt trong hệ thống của bạn trong vòng vài phút, và những dòng cuối cùng của đầu ra sẽ như thể hiện trong ảnh chụp nhanh bên dưới.

Ví dụ:

Hãy xem một số ví dụ về lệnh gọi hệ thống ghi trong bản phân phối Linux của chúng tôi. Do đó, hãy mở trình bao dòng lệnh và tạo một tệp C mới trong đó với phần mở rộng là dấu chấm c. Bạn phải sử dụng lệnh nano dưới đây để nhanh chóng tạo và mở nó. Chúng tôi đã đặt cho nó một cái tên là new.c.

$nanonew.c

Cửa sổ bên dưới sẽ được mở ra. Bây giờ bạn phải viết mã được dán vào tệp này. Trong đoạn mã này, trước tiên chúng tôi đã đưa vào một thư viện unistd.h. Sau đó, chúng ta đã tạo hàm chính và trong hàm này, chúng ta đã tạo một lệnh gọi hệ thống ghi. Trong lệnh gọi hệ thống này, tham số đầu tiên là bộ mô tả tệp. Trong trường hợp này, số nguyên 1 đại diện cho màn hình thiết bị đầu ra và nó được cố định. Vì vậy, đầu ra của chúng tôi sẽ được hiển thị trên màn hình. Tham số thứ hai hiển thị dữ liệu bộ đệm. Bạn có thể thêm bất cứ thứ gì vào đó. Và tham số cuối cùng hiển thị số đếm cho dữ liệu được đưa ra trong tham số bộ đệm. Như chúng ta đã đề cập 5 là số đếm, nó sẽ chỉ hiển thị 5 byte đầu tiên của dữ liệu bộ đệm và bỏ qua các byte còn lại. Lưu mã này bằng phím tắt Ctrl + S và thoát khỏi tệp này bằng lệnh Ctrl + X.

#bao gồm

Int chính()

{Viết(1Aqsa Yasin5);}

Bây giờ trong terminal, hãy thử lệnh gcc dưới đây để biên dịch mã mới tạo này với tên tệp.

$gccnew.c

Hãy kiểm tra mã này bằng cách sử dụng tệp a.out mặc định được tạo tại thời điểm chạy. Vì vậy, hãy thử lệnh a.out dưới đây để kiểm tra đầu ra của lệnh gọi hệ thống ghi. Chúng ta phải sử dụng nó với ./ để chọn tệp từ thư mục hiện tại.

$./a.out

Đầu ra bạn có thể thấy chỉ hiển thị từ Aqsa vì số đếm 5.

Hãy thay đổi mã của chúng ta một chút. Chúng tôi đã thay đổi số đếm thành 11 vì chúng tôi có tổng cộng 11 byte trong dữ liệu đệm Aqsa Yasin của chúng tôi. Vì vậy, lần này, đầu ra sẽ hiển thị toàn bộ byte dữ liệu chuỗi Aqsa Yasin. Lưu tệp này bằng Ctrl + S và thoát bằng phím tắt Ctrl + X.

Hãy biên dịch mã cập nhật bằng trình biên dịch gcc mới được cài đặt cho bản phân phối Linux. Hãy thử cùng một lệnh gcc cùng với tên của tệp là new.c.

$gccnew.c

Bây giờ, hiển thị đầu ra của cùng một mã bằng lệnh a.out trước đó như bên dưới. Đầu ra hiển thị chuỗi Aqsa Yasin đầy đủ của bộ đệm.

$./a.out

Hãy xem mã hoạt động như thế nào khi chúng tôi lấy số đếm lớn hơn tổng số byte mà dữ liệu bộ đệm chứa. Vì vậy, chúng tôi đã sử dụng số đếm là 30. Lưu và đóng tệp.

Biên dịch cùng một tệp được cập nhật bằng lệnh gcc như bên dưới.

$gccnew.c

Bây giờ thực thi tệp bằng lệnh a.out và đầu ra sẽ hiển thị dữ liệu bộ đệm cũng như một số giá trị rác với nó như được hiển thị trong đầu ra ảnh chụp nhanh bên dưới. $ ./A.out

Bạn cũng có thể kiểm tra tổng số byte được ghi vào tệp bằng cách sử dụng mã bên dưới trong cùng tệp.

Biên dịch mã bằng lệnh gcc.

$gccnew.c

Đầu ra hiển thị tổng số byte, bao gồm dữ liệu đệm và ngắt dòng, sử dụng lệnh a.out.

$./a.out

Phần kết luận:

Trong hướng dẫn này, chúng tôi đã trình bày chi tiết khái niệm sử dụng lệnh gọi hệ thống Viết trong C. Hãy thử tất cả các ví dụ để hiểu ý tưởng của lệnh gọi hệ thống viết bằng cách sử dụng bài viết này.