当我尝试写入打开USB设备时返回的文件描述符时,我收到了一个SIGPIPE错误。我可以整天阅读,但我不能写信。以下是代码:
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <sys/socket.h>
#include <string>
#include <stdio.h>
#include <sstream>
#include <pthread.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
void* Thread(void*);
int fd = -1;
std::string masterName;
std::string slavename;
int main() {
char buf[1024];
fd = open("/dev/usbdevice", O_RDWR | O_NOCTTY);
pthread_t thread;
pthread_create(&thread, NULL, Thread, (void*)NULL);
while(1) {
int returnVal = read(fd, buf, sizeof(buf));
if(returnVal <= 0) {
std::cout << "Read() returned 0 bytes." << std::endl;
break;
}
std::cout << "Buffer Data: " << byteChars << std::endl;
}
close(fd);
return 0;
}
void* Thread(void*) {
char buffer[2];
while(1) {
memset(buffer, 0, 2);
std::cout << "Write to device: " << std::endl;
std::cin >> buffer;
ssize_t ret = write(fd, buffer, 2);
if(ret == -1) {
std::cout << "errno: " << errno << std::endl;
}
else {
std::cout << "Successful write" << std::endl;
}
}
return NULL;
}
基本上我设置了一个线程,可以写入文件描述符“fd”,该文件描述符的开头是从“open()”函数返回的。每次尝试写入时都会出错。但正如我之前所说,我可以整天阅读,没有任何问题。
旁注 我检查了fd,以确保我写的是正确的,我绝对是。
当我研究SIGPIPE错误时,我发现当fd在远程端关闭时,每个人都说它发生了。那么#1如何关闭该文件描述符? #2如果它关闭,我仍然可以在同一个文件描述符上读取设备吗?