喂一次親愛的互聯網之間,C:先進先出線程,寫入和讀取字符串
我寫一個小程序,除其他事項外,寫入日誌文件中的所有收到的命令。
爲此,我想使用一個只會嘗試從管道中讀取的線程,而主線程只要它應該寫入該管道。
由於我不知道每個字符串命令的長度,所以我想到了寫入和讀取指向char buf[MAX_MESSAGE_LEN]
的指針。
因爲我到目前爲止已經試過不行,我會後我最大的努力:P
char str[] = "hello log thread 123456789 10 11 12 13 14 15 16 17 18 19\n";
if (pipe(pipe_fd) != 0)
return -1;
pthread_t log_thread;
pthread_create(&log_thread,NULL, log_thread_start, argv[2]);
success_write = 0;
do {
write(pipe_fd[1],(void*)&str,sizeof(char*));
} while (success_write < sizeof(char*));
和線程做這樣的:
char buffer[MAX_MSGLEN];
int success_read;
success_read = 0;
//while(1) {
do {
success_read += read(pipe_fd[0],(void*)&buffer, sizeof(char*));
} while (success_read < sizeof(char*));
//}
printf("%s",buffer);
(很抱歉,如果這並未」噸縮進,我似乎無法弄清楚這個編輯器......) 哦,而pipe_fd[2]
是一個全局參數。
因此,無論是按照我的想法,還是以另一種方式閱讀字符串而不知道長度,我都非常感謝。
在附註上,我正在研究Eclipse IDE C/C++,版本1.2.1,我似乎無法設置編譯器,因此它會將pthread庫鏈接到我的項目。我使用自己的Makefile來製作它(雙關語:P)。任何人都知道如何解決鏈接問題?我在網上看過,但我找到的所有解決方案都適用於舊版本,因爲選項卡和選項鍵不同。
反正,感謝一堆互聯網! Yonatan
修正了您的縮進問題,使用代碼按鈕的同時突出顯示較大的代碼塊。 ''語法是用於內聯代碼的。 – Femaref 2010-06-08 11:23:53