读到EOF但执行每行直到\ n

时间:2012-01-21 09:37:43

标签: c system-calls

仅使用系统调用,如何读取文件到EOF,并在此过程中执行程序中的每一行,直到行结束。 我文件中的每一行都有一个必须执行的程序名。

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

 }

2 个答案:

答案 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字节的缓冲区,但是为了避免缓冲区溢出,我必须进行边界检查和/或动态内存分配。

答案 1 :(得分: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));
    }
}