我正在使用libtar编写一个客户端服务器,通过套接字将存档发送到服务器。
此代码有效(服务器端):
socket_fd = socket(AF_INET,SOCK_STREAM,0));
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(PORT_MIGRATION_COPY);
bind(socket_fd,(struct sockaddr *)&addr, sizeof(addr));
listen(socket_fd,1); // Only 1 client
size_addr_cl = sizeof(addr_cl);
socket_cl = accept(socket_fd, (struct sockaddr *) &addr_cl, &size_addr_cl); // Wait until client arrives
tar_fdopen(&tar, socket_cl, NULL, NULL, O_RDONLY, 0644, 0);
tar_extract_all(tar, path);
tar_close(tar);
close(socket_fd);
此外,我需要在存档之前读取一个整数,所以我输入:
read(socket_fd, (char *)&number,sizeof(int));
在tar_fd_open
之前,并在客户端添加相应行:
write(socket_fd, (char *)&number,sizeof(int));
坏消息, tar 提取物停止工作,我不明白为什么。为什么先前的读/写会干扰文件描述符的下一个操作?
最佳答案
哦,我发现了一个愚蠢的错误,我正在从socket_fd而不是socket_cl读取!该死的。
关于c - tar_fdopen 以及以前使用过的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331857/