Tôi đang tìm kiếm giao diện C cho bash shell. I E. Tôi muốn có một tập hợp các chức năng cho phép tôi mở một phiên, thực hiện các lệnh, trả về kết quả đầu ra (STDOUT, STDERR) và cuối cùng là đóng trình bao. Nó có thể là một thư viện hoặc mã nguồn C dựa trên các thư viện chuẩn.Giao diện C cho bash tương tác
Trả lời
Bạn đang tìm kiếm để đạt được một cái gì đó như thế này:
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
Output:
./a.out
cat testing.c
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
gets()
và system
cuộc gọi có thể được bên trong một vòng lặp.
Chắc chắn, nhưng điều này sẽ không có môi trường liên tục. Nhiều khả năng đó là những gì OP quan tâm. –
Có. Ví dụ, tất cả các biến shell phải được giữ nguyên giữa các lệnh tiếp theo. – highsciguy
Vấn đề gốc chung có vẻ là cách lập trình chương trình thiết bị đầu cuối tương tác.
Bây giờ điều này sẽ phần nào của tôi yêu cầu kiểm tra thực tế, nhưng bạn sẽ xấp xỉ cần phải
- tạo ba pipes tương ứng với quá trình con
stdin
,stdout
, vàstderr
(quá trình cha mẹ bằng văn bản chostdin_pipe
và đọcstdout_pipe
vàstderr_pipe
) sử dụngpipe(2)
cuộc gọi hệ thống; - fork và ở trẻ em close chuyển hướng tiêu chuẩn vào, ra và lỗi đến các đầu thích hợp của các đường ống trên bằng cách gọi
dup2(2)
; - exec (
execve(2)
/execv(3)
) vỏ tương tác của bạn; - bắt đầu writing lệnh tới
stdin_pipe
và reading lỗi và phản hồi từ hai ống còn lại.
(Nếu bạn không cần phải thực hiện sự phân biệt giữa stdout
và stderr
bạn chỉ có thể đơn giản hóa cuộc sống của bạn bằng cách sử dụng popen(3)
- bạn có thể có thể chuyển hướng stderr
để stdout
bởi sự lựa chọn đúng đắn của chuỗi lệnh).
Đối với giải pháp làm việc phù hợp, tuy nhiên, tôi tin rằng bạn có thể sẽ cần sử dụng số giả giả (pty(7)
) bằng cách gọi forkpty(3)
thay vì chỉ cần ngã ba.
Vì nó bắt đầu ngày càng phức tạp hơn khi tính đến tất cả các giao dịch với thiết bị đầu cuối giả, tại sao bạn không tìm kiếm thư viện C mong muốn có thể thực hiện tất cả điều này cho bạn. Hoặc mô phỏng cách expect hoặc một số ngôn ngữ tương đương khác như pexpect
được triển khai. Trên thực tế, expect
dường như cung cấp một thư viện C có tên là libexpect(3)
cho bạn để bạn không cần phải viết tcl/tk để lập trình tương tác. Tôi không quen thuộc với thư viện, và có thể có những cái khác tốt hơn.
Bạn sẽ cần phải sử dụng ptys, gần như chắc chắn. –
@JonathanLeffler - cho các kịch bản phức tạp hơn có, chắc chắn. Ví dụ, nếu các chương trình chạy với shell yêu cầu thông tin về thiết bị đầu cuối (như số cột cho 'ls'). Tôi nghĩ rằng các lệnh shell đơn giản có lẽ vẫn có thể chạy với phương thức tiếp cận dựa trên 'popen (3)' + 'pclose (3)' (thiết lập các biến môi trường, chạy các chương trình không quan tâm đến các đầu cuối). Về nguyên tắc, tôi không thể thấy tại sao các shell như bash không cho phép sử dụng chúng một cách tương tác mà không có tty (mặc dù chúng chắc chắn kiểm tra xem bạn đang chạy chúng bằng tty và điều chỉnh hành vi tương ứng). – FooF
- 1. Tương tác với bash từ python
- 2. Tương đương với các giao diện Java trong C++?
- 3. Phân cấp lớp cho giao diện C#
- 4. C# TWAIN tương tác
- 5. Nền tảng chéo, Giao diện dựa trên văn bản tương tác với hoàn thành lệnh
- 6. C#: Enums trong giao diện
- 7. Tương tác với các chuỗi giao diện người dùng trong Java/J2ME
- 8. Giao diện trong C#
- 9. C# Giao diện Contraints
- 10. Tương đương với Java 1.6 @Override cho các giao diện trong C#
- 11. Triển khai giao diện không tương thích
- 12. Tìm kiếm trong lịch sử lệnh giao diện điều khiển tương tác PyCharm
- 13. thư viện C++ với giao diện c
- 14. Tại sao giao diện điều khiển tương tác python của tôi không hoạt động đúng?
- 15. Không phụ thuộc vào Giao diện Mocking Framework cho C#
- 16. Giao diện triển khai C#
- 17. Làm thế nào để viết đơn vị xét nghiệm cho giao diện điều khiển ứng dụng tương tác
- 18. C# generics với giao diện
- 19. C++ Giao diện plugin DLL
- 20. C# constructor trong giao diện
- 21. Câu hỏi giao diện C#
- 22. C# giao diện vỡ, ABI
- 23. REPL/LINQpad/F # tương tác thay thế cho C++ 0x?
- 24. Giao dịch tự động về môi giới tương tác
- 25. Tạo giao diện cho mẫu lớp trừu tượng trong C++
- 26. Giao diện Perl/Tk cho Ứng dụng C++
- 27. Không phải thành viên công cộng cho giao diện C#
- 28. C# khi nào lập trình cho giao diện?
- 29. về phía trước khai cho các giao diện Objective-C
- 30. cách triển khai Giao diện trong C++?
Tôi không biết về bất kỳ giao diện nào như vậy. Trường hợp sử dụng của bạn là gì? Bất cứ điều gì mà tập hợp các lệnh không được biết trước có lẽ sẽ trở thành một hack giòn xấu xí. –
@highsciguy dường như đang tìm kiếm một số [mong đợi] (http://expect.sourceforge.net/) như thư viện C. – FooF
Tại sao? Dù sao, cách đơn giản nhất (để có môi trường liên tục) là viết một kịch bản lệnh shell vào một tệp, sau đó thực thi nó bằng cách sử dụng 'system'. OK, một đường ống sẽ nhanh hơn, nhưng bạn không thể cần nhanh nếu không bạn sẽ không sử dụng vỏ nào cả. – cdarke