popen()
của C++ trả về một bộ mô tả tập tin chứa đầu ra, sau khi thực hiện một quy trình. Thay vì một FILE *, tôi cần một char *, tức là. một chuỗi là đầu ra của tôi. Tôi làm gì? Làm ơn giúp tôi.Đầu ra của C++ popen() vào một chuỗi
Trả lời
Tôi cho rằng tôi muốn làm điều gì đó về tự chung này:
char big_buffer[BIG_SIZE];
char small_buffer[LINE_SIZE];
unsigned used = 0;
big_buffer[0] = '\0'; // initialize the big buffer to an empty string
// read a line data from the child program
while (fgets(small_buffer, LINE_SIZE, your_pipe)) {
// check that it'll fit:
size_t len = strlen(small_buffer);
if (used + len >= BIG_SIZE)
break;
// and add it to the big buffer if it fits
strcat(big_buffer, small_buffer);
used += strlen(small_buffer);
}
Nếu bạn muốn nhận được phức tạp hơn, bạn có thể phân bổ không gian năng động, và cố gắng để tăng nó nếu cần thiết để giữ lượng đầu ra bạn lấy. Đó sẽ là một lộ trình tốt hơn trừ khi bạn có ít nhất một số ý tưởng về sản lượng của đứa trẻ.
Chỉnh sửa: Cho rằng bạn đang sử dụng C++, một kết quả với kích thước động thực sự là khá dễ dàng:
char line[line_size];
std::string result;
while (fgets(line, line_size, your_pipe))
result += line;
Tại sao không sử dụng 'std :: string' cho kết quả cuối cùng và sử dụng' append'? –
@KerrekSB: Chủ yếu là vì tôi bằng cách nào đó nghĩ rằng nó đã được gắn thẻ là C chứ không phải là C++. –
Đọc đầu ra từ FILE*
thành chuỗi bằng cách sử dụng các thường lệ stdio
thường trình.
Cảm ơn bạn đã trả lời. Bạn có thể vui lòng cung cấp mã mẫu ... !!! ??? –
Xem https://stackoverflow.com/a/10702464/981959
Bạn có thể làm điều đó trong hai dòng (ba bao gồm một typedef để cải thiện khả năng đọc):
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./some_command");
typedef std::istreambuf_iterator<char> iter;
std::string output(iter(proc.rdbuf()), iter());
}
Điều này sẽ đảm bảo việc phân bổ bộ nhớ và đóng lại luồng khi bạn kết thúc.
- 1. python - cách tạo đầu ra bằng cách sử dụng popen?
- 2. cách lấy chuỗi đầu ra lệnh linux và trạng thái đầu ra trong C++
- 3. Ống Linux: Ghi lại đầu ra thời gian thực của ping qua popen
- 4. Viết chuỗi vào luồng đầu ra
- 5. C libcurl lấy đầu ra thành một chuỗi
- 6. Đầu ra cửa hàng của subprocess.Popen gọi trong một chuỗi
- 7. lấy đầu vào của một từ chuỗi theo từ
- 8. C++ kết nối luồng đầu ra với luồng đầu vào
- 9. Phần đầu ra của một chuỗi trong vận tốc
- 10. Làm sạch Popen của Python
- 11. Chuyển hướng đa nền tảng đầu vào và đầu ra tiêu chuẩn của quá trình sinh ra trong C/C++ (chỉnh sửa bằng giải pháp)
- 12. Cách viết đầu ra của AUGraph vào một tệp?
- 13. CONCATENATE đầu ra của hai lệnh vào một dòng
- 14. Không thể lưu đầu ra của minicom vào một tệp
- 15. Piping cho đầu vào/đầu ra
- 16. giết một quá trình bắt đầu bằng popen
- 17. Đầu ra của mã C này
- 18. Viết đầu ra sqlplus vào một tệp
- 19. Đầu ra của Log4net vào Tài liệu của tôi
- 20. MSBuild trộn nhiều đầu vào vào mỗi đầu ra
- 21. tìm ra "chuỗi dài" của một int
- 22. Hadoop MapReduce - một tệp đầu ra cho mỗi đầu vào
- 23. Loại bỏ đầu ra của một hàm cần trình lặp đầu ra
- 24. c popen sẽ không bắt stderr
- 25. Đọc kết quả popen bằng C++
- 26. Lỗi đầu vào/đầu ra IOError khi in
- 27. Sử dụng chuỗi đầu vào để thụt lề/đầu ra trung tâm
- 28. Formatting C# đầu ra
- 29. C++ Đầu ra chuyển hướng
- 30. Lệnh C++ popen mà không cần bàn điều khiển
Có một cái nhìn vào chủ đề này: http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c Chúc may mắn! – DCMaxxx