2013-04-21 127 views
-1

我想使用FIFO和客户端获取目录路径的服务器 - 客户端模型,但出现错误“读取:错误的地址”和“写入:错误的地址”。C:“读取:错误的地址”和“写入:错误的地址”

客户

服务器的错误: “读:错误地址”

客户端的错误: “写:错误地址”

+0

阅读关于C编程和对一些好书Linux编程。使用'strlen(pathName)'作为'read'的长度参数确实是错误的,并且表明你很困惑...在花了一两天的时间阅读好材料之后,再次编写你的程序,使用'gcc -Wall -g',改进它直到没有任何警告,并使用'gdb'调试器进行调试。 – 2013-04-21 13:17:37

回答

0

也许你从readwrite滥用的返回值。成功后,他们会返回正面的价值观,并将他们视为错误。

此外,当阅读字符串的大小是未知的。所以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 
} 
+0

不,'strlen(pathName)'应该是'sizeof(pathName)' – 2013-04-21 13:20:34

+0

@BasileStarynkevitch是的,那也是。谢谢。 – 2013-04-21 13:21:40

+0

谢谢你这么多问题解决了 – CSoft 2013-04-21 13:35:21