我必须使用读取文件并使用系统调用将信息写入另一个文件。我已打开文件进行阅读,如下所示
filedesc = open(argv[1],O_RDONLY); //which works fine
打开一个文件写如下:
fdw=creat(strcat(store,argv[1]),PERMS) // PERMS 0666
使用lseek到达文件filedesc(反向和打印)
#include<stdio.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/types.h>
#include<string.h>
int main(int argc, char *argv [ ])
{
int filedesc,n,i,fdw,pos;
char c;
const char * prefix = "reserve_";
int needed = strlen( argv[ 1 ] ) + strlen( prefix ) + 1;
char store[ needed ];
strcpy( store, prefix );
if(argc != 2)
{
printf(" usage : %s filename ", argv[0]);
}
//strcat( store, argv[ 1 ] );
//printf( "%s\n", store );
filedesc = open(argv[1],O_RDONLY);
if(filedesc <1 )
{ printf("Unable to open file\n");
exit(1); }
if((fdw=creat(strcat(store,argv[1]),PERMS))==-1)
printf("Unable to create file,please use perror to find details\n");
else printf("File created\n");
if((pos=lseek(filedesc,0,SEEK_END))==0)
{
printf("Empty file\n");
exit(-1);
}
i=pos-1;
//printf("%d",i);
while(i!=0)
{
pos=lseek(filedesc,i-1,SEEK_SET);
read(filedesc,&c,1);
if( write(fdw,&c,1)!=1) //information is not being written to the file
printf("Error\n"); //pointed by fdw rather getting printed on the
//screen
i--;
}
close(filedesc);
close(fdw);
}
问题:如果我在没有第一个参数的情况下运行它,它会给出分段错误而不是使用。请帮忙
答案 0 :(得分:1)
您的if
行错了。它实际上将比较结果存储在fdw
中,而不是存储creat(2)
的结果。
if(fdw=creat(strcat(store,argv[1]),PERMS)==-1) /* Wrong. */
尝试:
if((fdw = creat(strcat(store, argv[1]), PERMS)) == -1)
^ ^
您还应该检查read
的结果:
if (read(filedesc, &c, 1) <= 0)
break;