我正在实现一个简单的协议,在2个人电脑之间通过串口进行文件传输,我得到了一个奇怪的错误。
在主要部分,我调用一个函数"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,.)将字符串写入文件描述符,但我得到了一个错误:“坏的文件描述符”在llwrite(int,.)上。如果我再次调用初始化(端口)函数,在此之前,它可以工作,并将N个字节写入文件描述符,但如果不调用,则再次给出“不好的文件描述符”错误。
这里是llwrite(int,.)职能:
int
llwrite(int fileDescriptor, unsigned char* buffer, unsigned int length) {
// The fd value here is 5
return writeBuffer(fileDescriptor,buffer,length);
}即使在return语句之前,如果我调用,例如,tcflush(.)函数我得到了“坏文件描述符”错误。
有线索吗?提前感谢!
编辑:
问题解决了。
伊隆(.)是错的。我正在返回写入ConnectReceiver(.)/ConnectSender(.)上的字节数。而不是文件描述符
现在它是正确的:
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;
}发布于 2011-10-30 15:09:18
这里没有足够的信息,但值得一试
return connectSender(fd);
break;那里的中断是死代码,因为返回停止了函数的执行。也许你不是有意回来的?
如果不是这样的话,尝试使用strace获取更多关于发生了什么的详细信息。如果您不在linux上,其他OSes应该有类似的工具,例如dtruss或ktrace。
https://stackoverflow.com/questions/7945629
复制相似问题