QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1177|回复: 17

字符串的读取--和文件的读取不一样吧??

[复制链接]
发表于 2003-5-31 08:39:00 | 显示全部楼层 |阅读模式
怎么将一个字符串读入一扇区,再将它完整地读出来?

不能用dd命令
 楼主| 发表于 2003-5-31 08:40:01 | 显示全部楼层
还有那字符串是变量怎么办?
回复

使用道具 举报

发表于 2003-5-31 11:07:18 | 显示全部楼层
NAME
       write - write to a file descriptor

SYNOPSIS
       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

the buf point to the string u want to write,
回复

使用道具 举报

 楼主| 发表于 2003-5-31 11:30:36 | 显示全部楼层
^_^ 还是Dragonfly gg 好

再问一下,我已将一个长为108字节的文件写入软盘的第250个扇区,我要将它完整地读出来,可是每次都将250扇区之后的所有内容都读出来,怎样才能只读108个字节?谢了
回复

使用道具 举报

发表于 2003-5-31 11:35:40 | 显示全部楼层
make sure u lseek to right place
off_t lseek(int fildes, off_t offset, int whence);
see man lseek;
then
ssize_t read(int fd, void *buf, size_t count);

put 108 as the count.
回复

使用道具 举报

 楼主| 发表于 2003-5-31 12:26:31 | 显示全部楼层
^_^ 还是Dragonfly gg 好

再问一下,我已将一个长为108字节的文件写入软盘的第250个扇区,我要将它完整地读出来,可是每次都将250扇区之后的所有内容都读出来,怎样才能只读108个字节?谢了
回复

使用道具 举报

发表于 2003-5-31 14:24:40 | 显示全部楼层
^_^ 还是Dragonfly gg 好

回复

使用道具 举报

发表于 2003-5-31 21:23:15 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2003-6-1 08:16:06 | 显示全部楼层
[quote:d662fce811="Dragonfly"]NAME
       write - write to a file descriptor

SYNOPSIS
       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

the buf point to the string u want to write,[/quote]

那个size_t 怎么定义?
回复

使用道具 举报

 楼主| 发表于 2003-6-1 08:18:26 | 显示全部楼层
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;sys/errno.h&gt;
#include <unistd.h>

#define BUFFER_SIZE 512
#define DEVICE_NAME "/dev/fd0"
#define MY_OFFSET (250*512)

int main (int argc, char **argv)
{
  int from_fd,to_fd;
  int bytes_read,bytes_write;
  char buffer[BUFFER_SIZE];
  char *ptr;
  if(argc!=2)
  {
  printf("%s need input filename\n\a",argv[0]);
  exit(1);
  }

  from_fd=open(DEVICE_NAME,O_RDWR);
  if(!to_fd)
  {
  printf("errno is %d\n",errno);
  exit(1);
  }
  
  if((to_fd=open(argv[1],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
  {
  fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
  exit(1);
  }
  
    lseek(to_fd,MY_OFFSET,SEEK_SET);

    bytes_read=read(from_fd,buffer,BUFFER_SIZE);
    ptr=buffer;
    bytes_write=write(to_fd,ptr,bytes_read);


  
  close(from_fd);
  close(to_fd);
  exit(0);
}

这是我写的一段代码,可是读出来老是不止512字节,请问怎样才能让它读出我想要的字节数?         
回复

使用道具 举报

发表于 2003-6-1 08:24:23 | 显示全部楼层
[quote:ce40da93b6="hlf1099210"][quote:ce40da93b6="Dragonfly"]NAME
       write - write to a file descriptor

SYNOPSIS
       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

the buf point to the string u want to write,[/quote]

那个size_t 怎么定义?[/quote]

size_t? u use an int is ok.
回复

使用道具 举报

发表于 2003-6-1 08:30:40 | 显示全部楼层
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;sys/errno.h&gt;
#include <unistd.h>

#define BUFFER_SIZE 512
#define DEVICE_NAME "/dev/fd0"
#define MY_OFFSET (250*512)

int main (int argc, char **argv)
{
  int from_fd,to_fd;
  int bytes_read,bytes_write;
  char buffer[BUFFER_SIZE];
  char *ptr;
  if(argc!=2)
  {
  printf("%s need input filename\n\a",argv[0]);
  exit(1);
  }

  from_fd=open(DEVICE_NAME,O_RDWR);
  if(!to_fd)
~~~~~u should compare the from_fd here, right? make sure u know what is the return value here from 'open'.

  {
  printf("errno is %d\n",errno);
  exit(1);
  }
  
  if((to_fd=open(argv[1],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
  {
  fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
  exit(1);
  }
  
    lseek(to_fd,MY_OFFSET,SEEK_SET);
~~~~why u lseek to_fd?

    bytes_read=read(from_fd,buffer,BUFFER_SIZE);
    ptr=buffer;
    bytes_write=write(to_fd,ptr,bytes_read);
~~~~can u check u byte_read value before u use it?

  
  close(from_fd);
  close(to_fd);
  exit(0);
}

这是我写的一段代码,可是读出来老是不止512字节,请问怎样才能让它读出我想要的字节数?         
~~~i do not know where u can judge how many u read.
回复

使用道具 举报

 楼主| 发表于 2003-6-2 07:20:05 | 显示全部楼层
thank you very much

我昨天也发现了这个问题,谢谢您的解答,我现在已经可以将一个文件写入软盘并将它完整的读出来了,谢谢你这段时间不厌其烦的解答。

主要我是第一次接触这种东西,问题真的是一个又一个,     
文件写入,可是文件的基本信息也要写入软盘,这些信息可没有固定长度了,我已将文件名和文件大小存入两个数组后再存入软盘的两个扇区,想把他们再读取出来,怎么办?不知道它的大小呀
回复

使用道具 举报

发表于 2003-6-2 08:35:57 | 显示全部楼层
u problem will come here one by one, more and more.
how to keep all file meta info like name, size, date, mode,
how to store a dir.
how many files i can support on a disk?
...

u have a dark future. frankly.
回复

使用道具 举报

 楼主| 发表于 2003-6-2 08:48:28 | 显示全部楼层
                 
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 18:35 , Processed in 0.057784 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表