2011-12-28 70 views
6

Tôi đang sử dụng lệnh system() trong C để thực hiện các lệnh như sc query mysql hoặc net start mysql.giá trị trả về của hệ thống() trong C

Nếu tham số là null con trỏ sau đó nó sẽ trả về 1 nếu bộ xử lý cmd là OK, nếu không nó sẽ trả về 0. Mở thực hiện lệnh thành công nó trả về 0.

Câu hỏi của tôi là: Tôi có thể có được một danh sách các lợi nhuận của nó giá trị? Giống như những gì nó sẽ trả về nếu lệnh không hợp lệ hoặc giá trị trả về khi thực hiện không thành công sẽ là gì? Tôi muốn làm những việc khác nhau tùy thuộc vào giá trị trả lại của system().

+1

trùng lặp có thể xảy ra của [mã trở lại của hệ thống()] (https://stackoverflow.com/questions/6904592/return-code-of-system) – CDahn

Trả lời

8

Khi hệ thống trạng thái docs () trả về -1 nếu tạo quy trình mới cho lệnh được thực hiện không thành công, ngược lại nó trả về mã thoát của lệnh được thực thi. đây là cùng một giá trị bạn có thể truy xuất bằng cách sử dụng echo $? trong unix hoặc echo %ERRORLEVEL% trong các cửa sổ sau khi thực hiện cùng một lệnh trong một trình bao. Vì vậy, nếu bạn muốn xử lý các giá trị trả về, bạn phải xem xét các lệnh được thực hiện trả về.

2

hệ thống() trả lại mã thoát của quá trình bạn bắt đầu.

Các mã thoát thường chỉ có quy ước rằng mã thoát 0 có nghĩa là thành công và khác không có nghĩa là lỗi. Đối với ý nghĩa thực tế của các mã thoát khác nhau, chúng đặc trưng cho từng chương trình, trong đó tùy thuộc vào ý thích của lập trình viên. Bạn sẽ phải tra cứu tài liệu của chương trình cụ thể mà bạn đang chạy (Mặc dù thường xuyên hơn, không phải tài liệu, vì vậy bạn sẽ phải đọc qua mã nguồn)

11

Tất cả những gì bạn cần làm là man system để biết thêm về system()

MÔ tẢ hệ thống() thực thi một lệnh quy định tại lệnh bằng cách gọi/bin/lệnh -c sh, và lợi nhuận sau khi lệnh đã được hoàn thành. Trong khi thực hiện lệnh, SIGCHLD sẽ bị chặn, và SIGINT và SIGQUIT sẽ bị bỏ qua.

Giá trị trả lại Giá trị trả lại là -1 do lỗi (ví dụ: ngã ba (2) không thành công) và trạng thái trả về của lệnh khác. Trạng thái trả lại sau ở định dạng được chỉ định trong thời gian chờ (2). Do đó, lệnh exit của lệnh sẽ là WEXITSTATUS (trạng thái). Trong trường hợp/bin/sh có thể không được thực thi, trạng thái thoát sẽ là lệnh của lệnh thoát (127). Nếu giá trị của lệnh là NULL, system() trả về nonzero nếu trình bao có sẵn, và không nếu không.

+2

#include để sử dụng WEXITSTATUS (status) vĩ mô .. – bazz

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