假設你正在使用fprintf()
,從man pages:
成功時,返回寫入的字符總數。
所以:
- 店
char
數組的大小,你會寫入一個變量x
- 如果
fprintf()
小於x
時,寫入被中斷。
- 出口優雅
編輯:
有兩件事情我在想:
1:putchar()
失敗,它寫入文件時顯示錯誤。由於寫入一個字節不會很長,所以這應該不太可能,因爲一旦字節被寫入(或者您認爲),它將處於安全狀態。
你可以做到這一點,像這樣
if(putchar(c) == EOF){
//write error
}
2:如果你被要求退出你檢測文件刪除的瞬間,那麼你需要監控的目錄。幸運的是,你只看一個目錄。然而,while
循環阻礙了事物的發展,因爲getchar()
是一個阻塞函數(在事情發生之前無法返回)。您應該使用inotify來監視目錄,然後可能使用poll輪詢文件描述符inotify()
。當我這樣做時,我使用了select,因爲我們被迫。
某種類型的想法如何監視一個目錄,inotify()
int length, i = 0;
char buffer[EVENT_BUF_LEN];
memset(buffer, 0, EVENT_BUF_LEN*sizeof(char));
//init inotify
fd = inotify_init();
if(fd < 0){
perror("inotify init");
}
//add directory to watch list
wd = inotify_add_watch(fd, path , IN_DELETE |
IN_DELETE_SELF | IN_MODIFY | IN_MOVE_SELF | IN_MOVED_FROM | IN_MOVED_TO);
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
//wait for event, since read() blocks
length = read(fd, buffer, EVENT_BUF_LEN);
if (length < 0) {
perror("zero event length");
}
struct inotify_event *event;
while (i < length){
//cast the event to a char buffer
event = (struct inotify_event*) &buffer[i];
if (event->len){
//this was a custom function of mine
storeEvent(event);
}
i += EVENT_SIZE + event->len;
}
你必須檢查哪些屬性添加目錄(如IN_DELETE
或IN_MODIFY
),因爲它們將決定觸發時使用inotify()
事件。請注意,此代碼只會檢測到一個事件,並在read()
聲明處阻止。
謝謝,但問題是,fprintf創建一個預定義的文件。我必須實現的是,例如: './Cat> redText'並且這個運行在一個while循環中,直到到達EOF。它在這個過程中,我必須確保創建的文件仍然存在。我添加了一個代碼模板,我們得到了原始問題。 請注意,沒有命令行參數,使用getchar/putchar。 – user2125874 2013-03-02 15:25:41
詳細說明了我的回答 – dudeofea 2013-03-02 19:49:08
好吧我認爲它正在做我打算做的事情,我繼續添加if-else以在while循環中檢查'putchar(c)== EOF',但是如何測試此條件。 ..有一種方法來創建一個虛假的EOF – user2125874 2013-03-03 03:12:05