Mã hóa với fork và thực thi bằng ví dụ trong c

Coding With Fork Exec Example C



Tiêu đề của bài viết của chúng tôi chứa hai chức năng khác nhau của ngôn ngữ C xảy ra khi chạy bất kỳ chương trình nào trong hệ thống của chúng tôi. Thật không may, không có khả năng xảy ra nhiều chương trình cùng một lúc trong C. Chỉ một tác vụ duy nhất có thể xảy ra tại một thời điểm cụ thể, có nghĩa là nó không cho phép các chương trình đồng thời chạy. Nó khiến bạn phải đợi hoàn thành một quy trình để thực thi quy trình kia. Để tránh sự cố khắc phục sự cố này, bạn có thể cần phải phát triển chương trình của mình theo cách tốt, là một nhà phát triển giỏi. Linux fork () được sử dụng để khắc phục sự chờ đợi và cho phép đồng thời trong hệ thống của bạn. Nó giúp sao chép một quy trình mới và tạo một quy trình mới bằng cách gọi quy trình đã sao chép. Quy trình mới là quy trình con và quy trình trước đó được gọi là quy trình mẹ.

Trong khi đó, hàm execute () được sử dụng để thay đổi chương trình hiện tại bằng chương trình mới. Việc thay thế này được thực hiện bằng cách sửa đổi nội dung của chương trình hoặc tệp. Vì vậy, sự khác biệt giữa fork và execute là fork tạo ra một quy trình mới từ quy trình hiện có và thực thi được sử dụng để thay thế chương trình hiện có bằng cách tạo một chương trình mới.







Điều kiện tiên quyết

Để thực thi bất kỳ chương trình c nào trên hệ thống Linux của bạn, chúng tôi cần cài đặt một số điều kiện tiên quyết trên đó. Đi tới thiết bị đầu cuối bằng cách sử dụng phương pháp phím tắt Ctrl + Alt + T. Bây giờ viết các lệnh sau để cài đặt các trang người đàn ông.



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



Nó sẽ cài đặt tất cả các trang tương ứng.





Về sau, để chạy một chương trình trên Linux, bạn cần cài đặt một trình biên dịch mã. Điều đó được sử dụng để biên dịch mã và thực thi nó. Vì mục đích này, chúng tôi sẽ cài đặt kho lưu trữ GCC trong hệ thống của mình.

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



Mã hóa với thực thi trong c

Khi chúng tôi đã cài đặt man pages trong Linux, chúng tôi sẽ sử dụng lệnh sau để xem mô tả liên quan đến tệp thi hành. Cú pháp mẫu chính như sau:

Cú pháp

Exec(tên đường dẫn/tập tin, argv);

Ở đây chúng tôi đã sử dụng tiêu đề unistd.h vì nó chứa tất cả thông tin của các họ hàm thực thi.

$Đàn ông người thực thi

Bây giờ trong hình ảnh được trích dẫn ở trên, bạn có thể quan sát các loại thực thi. Đây là họ các hàm thực thi. Mỗi cái dành cho một chức năng khác nhau theo cùng một cơ sở, thực thi.

Thí dụ: Bây giờ, đi xa hơn, chúng ta sẽ mô tả chức năng của hành động với sự trợ giúp của một ví dụ. Chúng ta sẽ sử dụng một hàm của hàm executive để chứng minh khả năng hoạt động của nó, đó là hàm executive. Đầu tiên, chúng tôi sẽ tạo hai tệp có phần mở rộng là .c. Sau khi chúng được tạo, chúng tôi sẽ viết các mã tương ứng vào chúng và thực thi chúng để xem kết quả.

Hãy xem xét một tên tệp sample4.c. Vui lòng mở nó và sử dụng mã sau. Trong đoạn mã này, chúng tôi đã sử dụng tệp thi hành theo một cách cụ thể được trích dẫn bên dưới.

Execv(./sample4copy, args);

Phần đầu tiên chứa đường dẫn thư mục mới và phần thứ hai hiển thị mảng đối số như một tham số mà chúng ta đã truyền.

Sample4.c

Trước hết, chúng tôi đã in id của quy trình hiện tại. Thứ hai, chúng tôi đã tạo một mảng ký tự có NULL ở cuối cho phần kết thúc. Thứ ba, chúng tôi đã gọi hàm sample4copy.

Sample4copy.c

Khi chúng ta gọi hàm thực thi (), hình ảnh quá trình sẽ bị thay đổi. Hình ảnh trích dẫn bên dưới hiển thị mã của sample4copy.c.

Ở đây chúng tôi chỉ sử dụng các câu lệnh in để lấy id của tiến trình hiện tại.

Đầu ra của các mã tương ứng có thể nhận được bằng cách sử dụng các lệnh sau.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./sample4

Như chúng ta đã mô tả trước đó, từ GCC được sử dụng để biên dịch mã và sau khi biên dịch, mã được thực thi thành công.

Theo hình ảnh, PID của tệp sample4.c được hiển thị đầu tiên khi nó được khai báo trước cuộc gọi thực thi. Sau đó, sau khi hàm execute () được gọi, cả hai câu lệnh in của tệp sample4copy.c đều được thực thi trong đó getpid () được sử dụng để lấy id của quy trình.

Mã hóa với một ngã ba trong c

Hàm fork () tạo ra tiến trình con từ tiến trình mẹ. Nó cũng chứa hai tiêu đề, bao gồm thông tin ngã ba trong đó.

Cú pháp:

Ngã ba Pid_t(vô hiệu);

Chúng tôi có thể sử dụng trang người đàn ông để được trợ giúp trong việc sử dụng

$Đàn ôngcái nĩa

Thí dụ: Bây giờ hãy xem xét một ví dụ bằng cách tạo một tệp sample3.c. Chúng tôi sẽ nhập mã bên trong tệp. Theo mã, chúng tôi đã đặt trạng thái fork là forkrank.

Sample3.c

Chúng tôi đã sử dụng câu lệnh if-else để áp dụng điều kiện. Các lệnh in đơn giản được khai báo ở đây để giúp hiểu khái niệm fork (). Forkrank đầu tiên được khai báo là 0 và sau đó là -1. Với một fork (), hiện có hai quy trình đang hoạt động đồng thời. Đầu ra có thể được lấy bằng cách sử dụng cùng một mã, như được sử dụng ở trên trong ví dụ thực thi.

$ GCC –o sample3.c
$./sample3

Kết quả đầu ra cho thấy rằng tiến trình con được thực thi sớm hơn tiến trình cha khi tiến trình cha đang đợi. Hàm wait ngụ ý rằng nó làm cho hàm cha đợi trừ khi một trong tất cả các tiến trình con bị chấm dứt.

Hệ thống Fork và Exec gọi chung

Ở đây chúng ta sẽ lấy hai tệp có tên là sample1.c và sample2.c. Đầu tiên, mở tệp sampl1.c và viết mã được thêm vào bên dưới trong hình ảnh. Chúng tôi đã sử dụng lệnh gọi hệ thống fork () ở đây; khi tiến trình con được tạo, p sẽ được gán bằng 0. Trong khi sử dụng lệnh gọi hệ thống thực thi, sample1.c sẽ được thay thế bằng sample2.c.

Sample1.c

Sample2.c

Tương tự như các ví dụ đã thảo luận ở trên, tệp sample2 sẽ chứa các câu lệnh printf trong đó. Trong sample1.c, lệnh in đầu tiên được thực hiện đầu tiên, sau đó hàm fork được gọi, khi p == 0, thì phần con được thực thi và tệp sample2.c sẽ được chạy. Đầu ra sẽ chứa GCC để biên dịch cả hai tệp. Ở đây id sample1.c cha và id sample2.c khác nhau vì chúng là cha và con.

Phần kết luận

Trong bài viết này, chúng tôi đã sử dụng cả fork và Ex một cách riêng biệt và chung để hiểu cách sử dụng và khái niệm một cách dễ dàng. Tôi hy vọng hướng dẫn này chứa đầy đủ nội dung sẽ dẫn đến việc tiếp cận trong việc nâng cao kiến ​​thức của bạn.