2012-01-21 5 views
0

システムコールだけを使用して、EOFまでのファイルをどのように読み込み、プロセス内で行の最後まで実行しますか? ファイル内のすべての行に、実行する必要があるプログラム名があります。EOFまで読んでいますが、すべての行をexecまで実行してください。

size_t fd1 = open("inputfile.txt", O_RDWR); 
char buf1[BUFFSIZE]; 
while(read(fd1,buf1,10) != EOF) 
{ 
     if(fd1[MAXDATA] == "\n") 

} 
+0

は、ここにコードを追加します。 – shift66

+0

これは私が行った場所です。 – madCode

答えて

0

私は最近、同様の機能を持つプログラムを作成しました:

#include <stdio.h> 
#include <fcntl.h> 
#include <stdlib.h> 
#include <string.h> 
#define BUFFERSIZE 1024 
#define LINEMAXSIZE 2000 
void main(int argvc,char** argv) 
{ 
int filedesc=open(argv[1],O_RDONLY); 
char buffer[BUFFERSIZE]; 

char expression[LINEMAXSIZE]; //the line 
int exprindex=0;  //line index 

int count=read(filedesc,buffer,sizeof(buffer));//read bytes 

while(count!=EOF) 
     { 
      int i=0; 
      while(i<count) 
      { 
      char c=buffer[i]; 
      if(c=='\n') 
      { 
       expression[exprindex++]='\0'; 
       char* line=strdup(expression);//create a new instance of the string 
       system(line); //execute the line 
       exprindex=0;//set line index to 0 
      } 
      else 
      { 
        expression[exprindex++]=c; 

       if(exprindex>=LINEMAXSIZE) 
       { 
       printf("Line Max length reached\n"); 
       } 

      } 

     i++; 
     } 


     count=read(filedesc,buffer,sizeof(buffer)); 
    } 
} 
+0

行末に達したらどうしますか?理解できません。 – madCode

+0

私はstrdupを使って行の新しいインスタンスを作成し、それをsystemで実行するよりも、最終的には行のインデックスを0に設定します –

0

このような何かを試してみてください:

FILE *f = fopen("filename", "r"); 
char *line = NULL; 
size_t length = 0; 
char buf[1024]; 
do 
{ 
    line = fgetline(f, &length); 
    if (line) 
    { 
     strncpy(buf, line, length); 
     buf[length] = '\0'; 
     system(buf); 
    } 
} while (line); 
fclose(f); 

も注意してください:製品コードで

  1. を、エラーチェックが(fgetlineいるので、必要とされるであろうが)エラーを区別しません。 EOFを返し、どちらの場合もNULLを返します。

  2. ファイルからコマンドを読み込んで実行することは、潜在的に危険です。悪質なコードを挿入して実行させることができます。

  3. わかりやすくするために1024バイトのバッファを使用しますが、IRLではバッファオーバーフローを回避するためにバウンドチェックや動的メモリ割り当てを行う必要があります。

+0

fgetlineやfopenを使用したくないです。システムコール。 – madCode

+0

どのような "システムコール"ですか?あなたは組立で働いていますか? –

+0

が好きです。fopenのために、私はただopenを使いたいです。 fgetlineのために、私はちょうど..read()を使いたい。基本的に、Linuxのman 2ページから。 – madCode

関連する問題