、
メインからここ
1)void read(char *arg[])
は()あなただけの、ファイル名を渡している機能します1つのcharポインタで十分です。だから、void read(char *arg)
2)fh = open(arg[1],O_RDONLY);
オープン()のようにそれを修正するシステムコールは、あるかどうかをそのので
fh = open(arg[1],O_RDONLY);
if(fh == -1) // try to read man page first.
{
perror("open");
return ;
}
のようなそのを変更
perror().
を使用してエラーメッセージを印刷しよう&戻り値をファイルを開くかどうか、キャッチすることができ
3)while (rd = read(fh,buffer,100)) { //some code }
なぜ回転ループですか?あなたはstat()
システムコールを使ってファイルの全データを一度に読むことができ、ファイルサイズを見つけ出し、ファイルサイズに相当する動的配列を作成し、read()
システムコールを使って全体/特定のデータを読み込みます。
最初に、open()
、read()
、stat()
システムコールのマニュアルページを参照してください。ここで
はarg2の何であるか、について説明
#include <stdio.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
void my_read(char *arg1){
int fh;
// char buffer[100];//don't use static array bcz we don't know how much data is there in file, create it dynamically
int rd,n;
fh = open(arg1,O_RDONLY);
if(fh == -1)
{
perror("open");
return;
}
else
{
//first find the size of file .. use stat() system call
struct stat v;
stat(arg1,&v);//storing all file related information into v
int size = v.st_size;//st.szie is a member of stat structure and it holds size of file
//create dynamic array equal to file size
char *p = malloc(size * sizeof(char));
printf("enter no of bytes you want to read :\n");
scanf("%d",&n);
if(n==0)
{
//read data from file and copy into dynamic array and print
int ret = read(fh,p,size);
if(ret == -1)
{
perror("read");
return ;
}
else
{
printf("data readed from file is :\n");
printf("%s\n",p);
}
}
else
{
//read data from file and copy into dynamic array and print
int ret = read(fh,p,n);
if(ret == -1)
{
perror("read");
return ;
}
else
{
printf("data readed from file is :\n");
printf("%s\n",p);
}
}
}
}
int main(int argc,char *argv[])
{
char f_name[100];
printf("enter the file name :\n");
scanf("%s",f_name);
my_read(f_name);
}
との要件のための私のソリューションですか?ファイルから読み込む最大バイト数? –
と..全体ファイルですべてのファイルを意味するのですか? arg1で指定されています。 –
arg [1]にはファイル名を指定し、arg2には読み込むバイトを指定します。はい、私は全体のファイルを意味し、私の英語のために申し訳ありません。 –