gpt4 book ai didi

C open() 为路径字符串返回 -1

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:21 26 4
gpt4 key购买 nike

当我使用 open() 作为

int ff=open("/home/user/desktop/bla/test",O_RDONLY);

它工作正常。

但是当我使用字符串作为(存储在字符串中的相同路径)路径时,它不起作用。

int ff=open(string,O_RDONLY);

这是为什么?

这是我的全部代码。我很困惑。我知道它应该工作。但我没有。我找不到错误。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <string.h>

void bla(char *);
int main(void)
{
// int i;
FILE * fp=fopen("path","r");
char line[256];

while( fgets(line,255,fp)!=NULL){

bla(line);

}

return 0;
}


void bla(char * line){

int status;
printf("%s",line);


pid_t pid=fork();

char string[256];
if(pid==0){

pid=wait(&status);

int ff=open(line,O_RDONLY);

if(ff<0){
printf("\topen error!\n\n");
return;}

int ret=read(ff,string,255);

if(ret<0){
printf("read error!\n");
return;}

printf("%s",string);
close(ff);

exit(0);


}
if (pid>0){
return;
}
}

在 bla 函数中,如果我用路径替换“行”,它就可以工作。我用 printf 来确定。路径相同(看起来相同)。

最佳答案

我叫恶作剧:-)

显然,如果 string 的值与您的字符串字面值完全相同,并且所有其他内容保持不变,那么它就可以正常工作。

因此,如果所有其他事情都相同,string 显然设置为您认为的值,即 “/home/user/desktop/bla/test”

我的建议是将其打印出来(连同错误字符串)以确保确定,例如:

fprintf (stderr, "DEBUG: string is [%s]\n", string);
int ff = open (string, O_RDONLY);
if (ff < 0)
perror ("Could not open file");

而且,既然您已经发布了代码,您的问题就很明显了:fgets() 不会删除尾随的换行符,因此,如果您添加我上面建议的代码,您会看到:

DEBUG: string is [/home/user/desktop/bla/test
]

并推导出问题。

解决此问题的一种快速方法是自己删除换行符,例如:

while (fgets (line, 255, fp) != NULL) {
size_t ln = strlen (line); // Add these
if ((ln > 0) && (line[ln-1] == '\n')) // three
line[ln-1] = '\0'; // lines.
bla (line);
}

关于C open() 为路径字符串返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23235583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com