仅使用系统调用,如何读取文件到EOF,并在此过程中执行程序中的每一行,直到行结束。 我文件中的每一行都有一个必须执行的程序名。
size_t fd1 = open("inputfile.txt", O_RDWR);
char buf1[BUFFSIZE];
while(read(fd1,buf1,10) != EOF)
{
if(fd1[MAXDATA] == "\n")
}
答案 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);
请注意:
在生产代码中,将需要进行错误检查,因为fgetline()不区分错误和EOF,并且在两种情况下都返回NULL。
从文件中读出命令并执行它们是有潜在危险的。可以插入恶意代码并使其执行。
为了简单起见,我使用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));
}
}