是否有一种方法将变量作为参数传递给C中的int open()函数?



我是C的初学者,我正在做一个项目,我需要打开一个目录作为参数并访问其中的每个文件,检查它们上的一些东西并编辑它们并收集文本文件中的结果。但是,当我尝试通过while循环访问每个文件时,open()函数没有按预期工作。以下是相关代码:

DIR *folder;
struct dirent *entry;
folder = opendir(argv[1]);
if(folder == NULL){
perror("Unable to read directory or directory doesn't exist");
exit(1);
}

if( (wfd=open("output.txt", O_WRONLY | O_CREAT, 0600)) == -1 ){
perror("open");                                                 /*Creating the text file */
exit(EXIT_FAILURE);
}
close(wfd);

while( (entry=readdir(folder)) ){

fd=open(entry->d_name, O_RDONLY);
if(fd == -1 ){
perror("open1");
exit(EXIT_FAILURE);
} 
/*opening and reading the file*/
bytes=read(fd,buf,sizeof(buf));
printf("%d bytes were read n", bytes);
close(fd);
buf[bytes]='';
.
.    /*Rest of the code where I check edit and write the results in the outfile.txt*/
.
}

所以你可以理解

fd=open(entry->d_name, O_RDONLY);

部分失败,随后出现错误消息&;open1: No such file or directory&;。我知道open()函数需要一个const* char,比如文件名的确切名称"filename.txt"但当我不知道我正在处理的目录的内容时,我应该如何做到这一点?我尝试将条目->d_name变量转换为像这样的字符变量:

char entryName[255];
strncpy(entryName, entry->d_name, 254);
entryName[254]='';

fd=open(entryName, O_RDONLY);

,但我得到相同的错误。是我遗漏了什么,还是应该以另一种方式实现?

除非您已经将chdir()ed到目标目录中,否则您不能只执行fd=open(entry->d_name, O_RDONLY);并期望在那里打开entry->d_name。您可能需要使用fd = openat(dirfd(folder), entry->d_name, O_RDONLY)

相关内容

  • 没有找到相关文章

最新更新