2008-10-29 25 views
7

Trong phòng thí nghiệm bảo mật thông tin tôi đang làm việc, tôi đã được giao nhiệm vụ thực hiện nhiều lệnh với một lệnh gọi tới "system()" (được viết bằng C , chạy trên Fedora). Cú pháp sẽ cho phép tôi thực hiện nhiều hơn lệnh thông qua hệ thống() là gì? (Ý tưởng này là bạn có thể thực hiện các lệnh tùy ý thông qua một chương trình đang chạy trên một máy tính từ xa, nếu chương trình tương tác với hệ điều hành thông qua hệ thống() gọi.)Sử dụng một hệ thống đơn() Gọi để thực hiện nhiều lệnh trong C

Ie:

char command[] = "????? \r\n"; 
system(command); 
+0

Trừ khi bạn đang chạy trên Windows, trở về vận chuyển (\ r) có thể gây ra rắc rối chứ không phải cho một lợi ích. Bạn sẽ có thể tách các lệnh bằng dòng mới - hoặc dấu chấm phẩy như những người khác đã đề xuất. –

+1

Về an ninh, cho phép các chương trình từ xa thực hiện các lệnh tùy ý là một quá trình đầy rẫy, nói chung. Nó là ít nghiêm trọng nếu chương trình cục bộ chạy với các đặc quyền của người dùng từ xa; nếu nó chạy với bất kỳ loại đặc quyền nâng cao nào, thì nó rất nghiêm trọng. –

Trả lời

13

Điều đó phụ thuộc vào vỏ được viện dẫn để thực thi các lệnh, nhưng nhìn chung hầu hết các vỏ sử dụng ; để lệnh tách nên một cái gì đó như thế này nên làm việc:

command1; command2; command3 

[EDIT]

Như @dicroce đã đề cập, bạn có thể sử dụng && thay vì ; sẽ ngừng thực thi tại lệnh đầu tiên trả về giá trị khác 0. Điều này có thể có hoặc không mong muốn (và một số lệnh có thể trả về không thành công) nhưng nếu bạn đang cố gắng xử lý các lệnh có thể thất bại, có lẽ bạn không nên chuỗi nhiều lệnh cùng nhau trong một cuộc gọi system() như bạn không có bất kỳ cách nào để xác định nơi xảy ra lỗi. Trong trường hợp này, đặt cược tốt nhất của bạn hoặc là thực hiện một lệnh tại một thời điểm hoặc tạo một kịch bản lệnh shell thực hiện xử lý lỗi thích hợp và gọi thay vào đó.

1

Một khả năng xuất hiện ngay lập tức trong đầu bạn. Bạn có thể viết tất cả các lệnh để một kịch bản sau đó chạy nó với:

system ("cmd.exe /c \"x.cmd\""); 

hay, bây giờ mà tôi đã nhận thấy bạn đang chạy trên Fedora:

system ("x.sh"); 
8

Sử dụng & & giữa các lệnh của bạn. Nó có lợi thế là nó chỉ tiếp tục thực thi các lệnh miễn là chúng trả về các mã lỗi thành công. Ví dụ:

"cd/proc & & mèo cpuinfo"

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