Tôi đang làm việc trên một daemon Linux và có một số vấn đề với stdin/stdout. Thông thường vì bản chất của một daemon bạn không có bất kỳ stdin hoặc stdout nào. Tuy nhiên, tôi có một hàm trong daemon được gọi khi daemon chạy lần đầu tiên để xác định các tham số khác nhau được yêu cầu cho daemon để chạy thành công. Khi chức năng này được gọi là thiết bị đầu cuối trở nên quá chậm chạp đến mức tôi phải khởi chạy một trình bao riêng biệt và tiêu diệt daemon bằng đầu để nhận được lời nhắc đáp ứng. Bây giờ tôi nghi ngờ rằng điều này có cái gì để làm với quá trình forking đóng stdin/stdout nhưng tôi không khá chắc chắn làm thế nào tôi có thể làm việc xung quanh này. Nếu các bạn có thể làm sáng tỏ tình hình sẽ được đánh giá cao nhất. Cảm ơn.Một Daemon Linux và STDIN/STDOUT
Edit:
int main(argc, char *argv[]) {
/* setup signal handling */
/* check command line arguments */
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if(pid > 0){
exit(EXIT_SUCCESS);
}
sid = setsid();
if(sid < 0) {
exit(EXIT_FAILURE);
}
umask(027);
/* set syslogging */
/* do some logic to determine wether we are running the daemon for the first time and if we are call the one time function which uses fgets() to recieve some input */
while(1) {
/* do required work */
}
/* do some clean up procedures and exit */
return 0;
}
Các bạn đề cập đến cách sử dụng một tập tin cấu hình. Đây là chính xác những gì tôi làm để lưu trữ các thông số nhận được thông qua đầu vào. Tuy nhiên, tôi vẫn cần phải có được những thứ này từ người dùng thông qua stdin. Logic để xác định xem chúng ta đang chạy lần đầu tiên có dựa trên sự tồn tại của tệp cấu hình hay không.
Chúng tôi không có ý tưởng nếu không nhìn thấy một số mã. Nhưng có vẻ như bạn đang làm sai. Bạn có nói rằng bạn muốn daemon để có thể mất stdin/stdout? Bạn sẽ phải ống chúng trên một ổ cắm hoặc một cái gì đó. – Falmarri
Có Falmarri nhưng chỉ khi mà chức năng cụ thể được gọi là như tôi đã nói là một điều một lần. Trong mã của tôi, tôi gọi hàm này sau khi tôi fork(); một quy trình mới. – Error1f1f
tại sao không sử dụng tệp cấu hình? –