我想从我的程序中将字符缓冲区传递给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(做了
cat / 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:
struct 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);
}
我希望这能为您提供我想要了解的内容。
谢谢!
答案 0 :(得分:3)
使用sizeof(struct my_table)
代替
write(fd, buffer, sizeof(struct my_table));
如果您的buffer
被定义为指针:
struct my_table *buffer;
那么buffer
的大小将等于指针的大小(32位系统为4,64位系统为8)而不是struct my_table
的实际大小