首先,我创建一个文件并将一些字符回显给它,然后捕获它显示的文件:
sasdfasdfas
asfdasfsadf
然后在C程序中,我打开文件:
int fd=open("file",O_RDWR);
Run Code Online (Sandbox Code Playgroud)
mmaped文件:
unsigned char *addr=mmap(NULL,length,PROT_WRITE,MAP_PRIVATE,fd,pa_offset);
Run Code Online (Sandbox Code Playgroud)
其中length是关于fstat获取的文件大小的int,pa_offset是0.
open函数和mmap函数都返回良好,即open返回一个像3这样的正整数,mmap返回一个正确的地址,如0x7fd36999d000.
我从addr读取文件,一切正常.当我写它时,似乎在我打印程序中的内存时成功写入,但是如果我捕获它,实际的文件内容不会改变.
我尝试了一些像使用msync()的努力,但都有相同的结果.
你们谁会好心地告诉我在哪里被绊倒了?我只是想从mmap -_-写入文件
我正在尝试直接编辑二进制文件,我知道两个编辑器,vi和hexedit.但是当我使用它们单独打开一个二进制文件时,cotens是不同的.以下是我的所作所为.
首先,我使用"dd if =/dev/sda of = mbr bs = 512 count = 1"来生成包含mbr数据的二进制文件.然后我用"hexedit mbr"打开它,它会显示:begin:
00000000 EB 63 90 D0 BC 00 7C 8E C0 8E D8 BE 00 7C BF 00
00000010 06 B9 00 02 FC F3 A4 50 68 1C 06 CB FB B9 04 00
00000020 BD BE 07 80 7E 00 00 7C 0B 0F 85 0E 01 83 C5 10
Run Code Online (Sandbox Code Playgroud)
结尾:
000001E0 FF FF 83 FE FF FF 00 40 D6 02 00 38 2B …Run Code Online (Sandbox Code Playgroud) 我有这样的双重功能:
double f(){
double value=0.1234;
return value;
}
Run Code Online (Sandbox Code Playgroud)
在另一个功能中,我收到了值并打印出来.
printf("%f",f());
Run Code Online (Sandbox Code Playgroud)
我想看到值0.1234被打印,但是打印了0.如果我像这样转换类型:
printf("%f",(double)f());
Run Code Online (Sandbox Code Playgroud)
会打印一个非常奇怪的值,如-147923499.34.
经过一些检查(print sizeof)后,我发现f()返回的值是4个字节,而double类型应该是8个字节.
那么,这个的根本原因是什么?如何从函数中返回正确的double值?
我是套接字程序的新手.学习sendto函数时,作为原型:
ssize_t sendto(int socket, const void *message, size_t length,
int flags, const struct sockaddr *dest_addr,
socklen_t dest_len);
Run Code Online (Sandbox Code Playgroud)
我知道"消息"包含目标IP,dest_addr参数还指定了目标IP地址.这个dest_addr论点还有其他用法吗?
code.h
char* f(int ar1, int arg2, int arg3, char** arg4= NULL);
Run Code Online (Sandbox Code Playgroud)
code.cpp
char* f(int ar1, int arg2, int arg3, char** arg4) {
...
}
Run Code Online (Sandbox Code Playgroud)
other_code.cpp
char* r= f(1,2,3);
Run Code Online (Sandbox Code Playgroud)
other_cod.cpp使用3个args调用此函数f,但该函数在定义中有4个args.没有其他名称为f的函数.这个呼唤如何成功?