我正在用 Objective-C 编写一个串行通信包装类。为了列出所有可用的串行调制解调器并设置连接,我使用的代码与Apple 在此示例项目中使用的代码几乎相同。
我可以像苹果那样读写。但是我想在第二个线程上实现一个循环,如果NSString *writeString
更长的 0 则写入流,如果字节可用,则在写入后读取。
我的写作工作非常简单。我只是使用了write
在unistd.h
.
阅读将不起作用。每当我调用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);
我在这里做错了什么?