小编Akr*_*Akr的帖子

为什么我不能写入mmaped文件

首先,我创建一个文件并将一些字符回显给它,然后捕获它显示的文件:

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 -_-写入文件

c mmap memory-mapped-files

3
推荐指数
1
解决办法
2255
查看次数

使用vi和hexedit打开二进制文件,为什么竞争不同?

我正在尝试直接编辑二进制文件,我知道两个编辑器,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)

linux vi mbr binaryfiles hex-editors

1
推荐指数
1
解决办法
3万
查看次数

为什么从double函数返回变为int?

我有这样的双重功能:

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值?

c double int

1
推荐指数
1
解决办法
1142
查看次数

为什么sendto函数需要第三个参数,在socket编程中

我是套接字程序的新手.学习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论点还有其他用法吗?

c sockets sendto

0
推荐指数
1
解决办法
2万
查看次数

这个C++代码如何让我用错误数量的参数调用函数?

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的函数.这个呼唤如何成功?

c++ class

-2
推荐指数
1
解决办法
144
查看次数

标签 统计

c ×3

binaryfiles ×1

c++ ×1

class ×1

double ×1

hex-editors ×1

int ×1

linux ×1

mbr ×1

memory-mapped-files ×1

mmap ×1

sendto ×1

sockets ×1

vi ×1