我在Objective-C中編寫了一個串行通信包裝類。要列出所有串行可用調制解調器並設置連接,我使用的代碼幾乎與this example project by Apple中使用的代碼相同。OSX串行讀取凍結/掛起
我可以讀寫蘋果做它的方式。但是我想在第二個線程上實現一個循環,並且如果一個NSString *writeString
的長度爲0,並且如果字節可用,則在寫入之後寫入流。
我寫得很直截了當。我剛剛使用unistd.h
中聲明的write
函數。
閱讀不起作用。每當我打電話read()
,函數掛起,我的循環不繼續。
這裏是我的循環使用的代碼:
- (void)runInCOMLoop {
do {
// write
} while (bytesWritten < strlen([_writeString UTF8String]));
NSMutableString *readString = [NSMutableString string];
ssize_t bytesRead = 0;
ssize_t readB = 0;
char buffer[256];
do {
readB = read(_fileDescriptor, &buffer, sizeof(buffer));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this function hangs
bytesRead += readB;
if (readB == -1 {
// error
}
else if (readB > 0) {
if(buffer[bytesRead - 1] == '\r' ]] buffer[bytesRead - 1] == '\n') {
break;
}
[readString appendString:[NSString stringWithUTF8String:buffer]];
}
} while (readB > 0);
什麼我錯在這裏做什麼?
沒有發送任何數據? –