2017-11-14 19 views
0

ファイル(arg [1])を読み込み、特定のバイト数[arg2]のコンテンツを表示するプログラムを作成する必要があります。バイトを指定しない場合、ファイル全体が印刷されます。ファイルを読み書きするopen()read()

void read(char *arg[]){ 
     int fh; 
     char buffer[100]; 
     int rd; 

     fh = open(arg[1],O_RDONLY); 
     printf ("Printing %s\n",arg[1]); 
     while (rd = read(fh,buffer,100)) { 
       buffer[rd] = '\0'; 
       printf("%s",buffer); 
       } 
     } 

少なくともopen()、read()を使用する必要があります。 誰かが私を助けることができますか? array of char pointerとファイル名をキャッチする必要が、キャッチいただきました!あなたが書いたプログラムについてのいくつかの観測があり

+0

との要件のための私のソリューションですか?ファイルから読み込む最大バイト数? –

+0

と..全体ファイルですべてのファイルを意味するのですか? arg1で指定されています。 –

+0

arg [1]にはファイル名を指定し、arg2には読み込むバイトを指定します。はい、私は全体のファイルを意味し、私の英語のために申し訳ありません。 –

答えて

0

メインからここ

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); 
} 
+0

ちょうど、感謝! –

0
#include <stdio.h> 
#include <stdlib.h> 

void print(char* buff, int size) 
{ 
    int i; 
    for(i = 0; i < size ; i++) 
    { 
    printf("%c",buff[i]); 
    } 
    printf("\n"); 
} 

int main(int argc, char* argv[]) 
{ 
    FILE * pFile; 
    long lSize; 
    char * buffer; 
    size_t result; 

    pFile = open (argv[1] , O_RDONLY); 
    if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 
    if(argv[2]) 
    { 
     lSize = argv[2]; 
    } 
    else 
    { 
     fseek (pFile , 0 , SEEK_END); 
     lSize = ftell (pFile); 
     rewind (pFile); 
    } 

    buffer = (char*) malloc (sizeof(char)*lSize); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 
    result = read (pFile,buffer,lSize); 
    if (result != lSize) {fputs ("Reading error",stderr); exit (3);} 
    print(buffer,lSize); 


    fclose (pFile); 
    free (buffer); 
    return 0; 
} 
+0

fopenを使用できません –

+0

あなたのために修正しました –

+0

助けてくれてありがとうございますが、別の回答のコードを使用しました。私はupvote bczを与えることはできません私は15未満の担当者を持っています。 –

関連する問題