我正在尝试编写一个客户端可以用来浏览服务器目录的TCP服务器。除此之外,如果是常规文件,我想发送目录的大小。文件的大小保存在“stat”结构下的size_t变量中。 我在这里这样做:
char *fullName /* The path to the file *.
/**
* Some code here
*/
struct stat buffer;
lstat(fullName, &buffer)
所以现在buffer.st_size包含文件的大小。现在我想写()它到监听套接字,但显然我必须以某种方式将其转换为字符串。我知道这可以通过按位右移(>>)运算符以某种方式完成,但对我来说似乎太痛苦了。你能帮我解决这个问题吗(即使其他那些按位运算符也没办法)?
顺便说一句,这不是为了学校或smth ......
PS:我在Linux上运行它。
答案 0 :(得分:9)
您可以使用sprintf()
-family函数的成员将“某些内容”转换为“字符串”。
#define _POSIX_C_SOURCE 200112L
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
size_t s = 123456789;
char str[256] = ""; /* In fact not necessary as snprintf() adds the
0-terminator. */
snprintf(str, sizeof str, "%zu", s);
fputs(stdout, "The size is '");
fflush(stdout);
write(fileno(stdout), str, strlen(str));
fputs(stdout, "'.\n");
return 0;
}
打印出来:
The size is '123456789'.
答案 1 :(得分:3)
您知道size_t
是无符号的,但长度未知。在C99中,我们有z
修饰符,使完整的说明符%zu
:
size_t s = 123456789;
char str[256];
snprintf(str, sizeof str, "%zu", s);
答案 2 :(得分:1)
char *
不一定是字符串,您可以发送您想要的内容。
只需管理另一台计算机使用相同的协议。
所以你可以这样做:
write(socket, &(buffer.st_size), sizeof(size_t));
这可能要快,你可能要考虑到字节序等。