2010-07-25 27 views
7

Tôi là người mới bắt đầu sử dụng C++.Tôi có thể tìm hiểu cách làm cho chương trình C++ tương tác với Hệ điều hành (Linux)

Tôi muốn tạo các chương trình nhỏ tương tác với hệ điều hành (sử dụng Kubuntu Linux). Cho đến nay, tôi đã không thể xác định vị trí bất kỳ hướng dẫn hoặc sổ tay để có được C + + để giao diện với hệ điều hành.

Trong PHP, tôi có thể sử dụng lệnh exec() hoặc toán tử backtick để khởi chạy các lệnh thường được thực thi trong bảng điều khiển. Tôi có thể làm những việc tương tự như thế nào trong C++? Làm thế nào tôi có thể nhận được chương trình C++ của mình để thực thi bất kỳ lệnh nào khác? Làm cách nào để có được đầu ra của các lệnh như vậy?

Cảm ơn.

Trả lời

6

Bạn có thể sử dụng lệnh system() trong stdlib để thực hiện các lệnh hệ thống:

#include <stdlib.h> 
int main() { 
    system("ls -l"); 
} 

system() trả về một int như giá trị trả về của nó, nhưng giá trị của int là hệ thống phụ thuộc vào. Nếu bạn thử và sử dụng một lệnh không tồn tại, bạn sẽ nhận được kết quả đầu ra "không có lệnh" như vậy, và thường là một giá trị trả về khác không. (Ví dụ: chạy system("ls -l"); trên máy Windows XP của tôi ở đây trả về giá trị là 1.

+0

Cảm ơn bạn đã nhập mã mẫu và trỏ đến thư viện thích hợp. Điều đó rất hữu ích. +1 – augustin

+0

Tôi đã xem xét đánh dấu một trong các câu trả lời là câu trả lời chính xác. Tôi đã nhận biết dấu kiểm. Tuy nhiên, ba câu trả lời là hữu ích và mỗi bổ sung thông tin mà hai người kia không có, vì vậy tôi đã do dự như là một trong những lựa chọn. Nhưng nếu nó giúp hệ thống, tôi sẽ đi với đề xuất của bạn. Đó là một sự xấu hổ tôi có thể chọn cả ba :) – augustin

+0

Cảm ơn. Câu trả lời hoàn hảo cho tôi – LinuxBill

7

Bạn có thể sử dụng system() để thực hiện các lệnh tùy ý, nếu bạn muốn dễ dàng điều khiển đầu vào và đầu ra bằng chương trình, bạn nên xem xét popen().

Đối thậm chí hơn điều khiển, bạn có thể nhìn vào làm chính xác những gì một lớp vỏ có thể làm, tạo ra một số file descriptor thêm, forking để bắt đầu quá trình khác, thiết lập file descriptor 0, 1 và 2 (input, output và lỗi) trong quá trình đó để kết nối chúng với các bộ mô tả tệp quá trình ban đầu của bạn, sau đó thực hiện chương trình bạn muốn kiểm soát. Đây không phải là do những phần mờ của trái tim :-)

+0

Cảm ơn bạn đã đề cập đến popen(). Bây giờ tôi biết những gì để tìm kiếm, tôi đã có thể tìm thêm tài nguyên trên web (ví dụ: http://www.gidforums.com/t-3369.html). Tôi muốn sớm có thể thử những thứ "không dành cho người yếu tim" :) +1 – augustin

2

Bạn có thể sử dụng system() như được hướng dẫn trước đó hoặc bạn có thể sử dụng thư viện cung cấp quyền truy cập API POSIX tiêu chuẩn. unistd.hThe GNU C Library bao gồm nhiều chức năng cho tương tác với hệ điều hành. Khả năng với các thư viện này là vô tận khi bạn có thể tự mình thực hiện các chức năng. Một ví dụ đơn giản: quét một thư mục cho các tệp văn bản với scandir() và in nội dung của tệp.

+0

Cảm ơn bạn đã cung cấp thêm các gợi ý cho các thư viện khác. Tôi bắt đầu với một cái gì đó rất đơn giản, và tôi đã đánh dấu những libs cho khi tôi cần phải mở rộng hơn nữa những gì tôi có thể làm. +1 – augustin

Các vấn đề liên quan