我正在实现一个简单的协议,通过串口在2台PC之间进行文件传输,我收到了一个奇怪的错误。
在主要部分我调用一个函数“llopen”:
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) + 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
return connectSender(fd);
break;
case RECEIVER:
return connectReceiver(fd);
break;
}
return fd; // The fd value here is 5
}
之后,我调用一个函数 llwrite(int fd,...)将一个字符串写入文件描述符,但是我收到一个错误:
这是 llwrite(int fd,...)函数:
int
llwrite(int fileDescriptor, unsigned char* buffer, unsigned int length) {
// The fd value here is 5
return writeBuffer(fileDescriptor,buffer,length);
}
即使在 return 语句之前,如果我调用 tcflush(...)函数,我也会收到“错误文件描述符”错误。< / p>
有任何线索吗?提前谢谢!
编辑:
问题解决了。
llopen(...)错了。我正在返回在 ConnectReceiver(...) / ConnectSender(...)上写入的字节数,而不是文件描述符 < / p>
现在是对的:
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) + 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
if( connectSender(fd) > 0 ) return fd;
case RECEIVER:
if( connectReceiver(fd) > 0 ) return fd;
}
return -1;
}
答案 0 :(得分:0)
这里的信息确实不够,但值得注意的是你做了
return connectSender(fd);
break;
中断有死代码,因为返回会停止执行该函数。也许你不是故意回来的?
如果不是这种情况,请尝试使用strace
获取有关正在发生的事情的更多详细信息。如果您不在Linux上,其他操作系统应该有类似的工具,例如dtruss
或ktrace
。