我看到设备文件可以直接在Linux中访问 ,我想试一试。 我有一个没有任何文件系统的可用磁盘分区。 我的testing代码如下。 我希望在第二次运行程序时获得输出read data: 199 。 但实际上,我得到输出read data: 0两次。 程序中没有出现错误。 我不知道哪里错了。
谢谢你的时间。
testing代码:
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> int main(){ int num = 0; int fd = open("/dev/sda6",O_RDWR); if(fd == -1){ fprintf(stderr,"open device Failed,errno : %s(%d) n",strerror(errno),errno); return 1; } ssize_t ret = read(fd,&num,sizeof(int)); if(ret != sizeof(int)){ fprintf(stderr,"read fails,errno); return 1; } printf("read data: %dn",num); num = 199; ret = write(fd,"write fails,errno); return 1; } close(fd); return 0; }
c ++指示器/装载轮
如何将.net框架安装程序添加到部署项目?
编译Windows 7的IP2Location Python扩展
如何计算TCP校验和
RegisterPowerSettingsNotification C#pinvoke
v4l2很简单的例子
Visual Studio强制桌面API
设置多个壁纸?
用户空间中的Linux C / C ++定时器信号处理程序
read和write开始读取/写入描述符中存储的隐式文件偏移量,并将其增加读取/写入的字节数。 因此,你现在将读取字节0..3,然后写入字节4..7。
而不是read和write lseek等 ,并使用POSIX标准pread和pwrite不使用描述符中的隐式文件偏移量,而是从调用中的文件的开头取得明确的文件偏移量。
#include <unistd.h> ssize_t pread(int fd,void *buf,size_t count,off_t offset); ssize_t pwrite(int fd,const void *buf,off_t offset);
…
ssize_t ret = pread(fd,sizeof(int),0); ssize_t ret = pwrite(fd,0);
你不在你的程序中seek ,所以它做了什么:读取设备的前4个字节,然后写第二个4字节。
尝试
lseek(fd,SEEK_SET);
在写之前如果你想写在一开始就是假的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。