我想将一个字符缓冲区从我的程序传递给一个 proc 条目(比如 /proc/my_file)。此字符缓冲区包含我的结构的元素,其形式为:
struct my_table { char src_ip[4]; char dest_ip[4]; int out_flag; }my_t;
我分配 my_table 的元素并将其内容复制到 unsigned char 缓冲区,如下所示:
memcpy(buffer, &my_t, sizeof(struct my_table));
然后我将缓冲区的内容写入我创建的 proc 条目(名称为 my_file),如下所示:
write(fd, buffer, sizeof(buffer));
其中 fd 是使用 O_WRONLY 打开 /proc/my_file 后 open() 返回的文件描述符 | O_APPEND 标志。
我无法理解的是,在这种情况下,我只能看到第一个字符串,即 my_t.src_ip 被写入 /proc/my_file (做了
猫 /proc/my_file
检查写入的内容),随后我观察到 /proc/my_file 的 write() 操作在缓冲区内容中遇到空字符时立即结束。
我可以知道为什么会发生这种情况以及如何解决将结构的内容写入 /proc 条目的问题吗?
编辑:SSCCE 我的问题:结构:
struct my_iptable {
char protocol[5]; // to check whether the protocol mentioned is tcp/udp/icmp
char src_ip[16]; // source ip address
char dest_ip[16]; // destination ip address
char src_net_mask[16]; // source net mask
char dest_net_mask[16]; // destination net mask
int src_port; // source port number
int dest_port; // destination port number
char action[8]; // either block or unblock
int delete_rule; // gets the rule number to be deleted
int print_flag; // is set if we are asked to print the rules that have been set
int out_flag; // is set if the packet is outbound, else set to 0;
};
将 my_ipt 赋值为 null:
结构 my_iptable my_ipt; memset(&my_ipt, '\0', sizeof(struct my_iptable));
我已经正确分配了 my_ipt 的字段。
复制到缓冲区和写入 proc 部分:
unsigned char write_buf[sizeof(struct my_iptable)];
memcpy(write_buf, &my_ipt, sizeof(struct my_iptable));
int proc_fp = open("/proc/minifw", O_WRONLY | O_APPEND);
if(proc_fp < 0) {
printf("Couldn't open /proc/minifw for writing\n");
exit(EXIT_FAILURE);}
if(write(proc_fp, write_buf, sizeof(struct my_iptable)) == -1) {
printf("There was an error writing to minifw buffer\n");
exit(EXIT_FAILURE);
}
我希望这可以为您提供有关我想了解的内容的适当信息。
谢谢!