銘記沒有鍵盤輸入與多客戶端Unix域套接字溝通,我想創建一個文件描述符替換標準輸入。創建文件描述符替換標準輸入(在選擇())
對於多客戶端插口,您必須將標準輸入的文件描述符(即0與FD_SET(0, &readfds)
)添加到readfds以鍵盤輸入(FD_ISSET(0, &readfds)
)發送到服務器。由於我不想每次啓動我的客戶端時都要編寫代碼,我想用自定義代碼替換此文件描述符(通過從另一個程序寫入此文件)。
我檢查了Create a file descriptor創建兩個方案:
一個寫入到文件描述符:
int main() {
char buffer[] = "test";
int fd = open("sample.dat", O_WRONLY | O_CREAT, 0666);
dup2(fd, 5);
if(write(5, buffer, 4) < 0)
fprintf(stderr, "write %s\n", strerror(errno));
close(5);
return 0;
}
而另外一個,從記載:
int main() {
char buffer[4];
int fd = open("sample.dat", O_RDONLY);
dup2(fd, 5);
for(;;) {
if(read(5, buffer, 4) < 0)
fprintf(stderr, "read %s\n", strerror(errno));
printf("%s\n", buffer);
sleep(1);
}
return 0;
}
我的問題是:是否有可能使這個文件描述符爲標準輸入樣?我的意思是實際上我的第二個程序無休止地讀取「測試」,因爲(當然)sample.dat仍然包含「test」,但是我想在讀取它之後刪除它。
這不是很清楚你問 - 你是什麼「標準輸入狀」是什麼意思?當你從標準輸入讀的東西你讀它只有一次, –
@ChrisTurner不是不休,因爲標準輸入「刪除」 /「清除」(我不知道它究竟是如何工作的),一旦被讀取 – Rallph