C:“读取:错误的地址”和“写入:错误的地址”
我想使用FIFO和客户端获取目录路径的服务器 - 客户端模型,但出现错误“读取:错误的地址”和“写入:错误的地址”。C:“读取:错误的地址”和“写入:错误的地址”
客户
服务器的错误: “读:错误地址”
客户端的错误: “写:错误地址”
也许你从read
和write
滥用的返回值。成功后,他们会返回正面的价值观,并将他们视为错误。
此外,当阅读字符串的大小是未知的。所以strlen
是不合适的。
if((controlRead = read(fdp,pathName,sizeof(pathName))) <= 0)
{
// error ...
与write
相同的条件。
当传送字符串,它是传递字符串长度以及一个好主意:
写作:
void write_string(int fd, const char *string)
{
size_t len = strlen(string);
write(fd, &len, sizeof(len));
write(fd, string, len);
}
阅读:
void read_string(int fd, char *buffer, size_t size, size_t *len)
{
size_t t_len;
read(fd, &t_len, sizeof(t_len));
if (t_len > size) t_len = size;
read(fd, buffer, t_len);
if (t_len < size) buffer[t_len] = 0; // null-terminate if there is enough space
if (len) *len = t_len; // return length if wanted
}
不,'strlen(pathName)'应该是'sizeof(pathName)' – 2013-04-21 13:20:34
@BasileStarynkevitch是的,那也是。谢谢。 – 2013-04-21 13:21:40
谢谢你这么多问题解决了 – CSoft 2013-04-21 13:35:21
阅读关于C编程和对一些好书Linux编程。使用'strlen(pathName)'作为'read'的长度参数确实是错误的,并且表明你很困惑...在花了一两天的时间阅读好材料之后,再次编写你的程序,使用'gcc -Wall -g',改进它直到没有任何警告,并使用'gdb'调试器进行调试。 – 2013-04-21 13:17:37