C程序访问设备文件不起作用

我看到设备文件可以直接在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校验和

将名称而不是指定文件夹中所有文件夹的path存储到列表中?

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);

在写之前如果你想写在一开始就是假的。

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...