-1

当我运行这个程序时。文件描述符返回-1值,因此程序终止。我不知道为什么会这样。因为 pid 值正是我要打开的文件的名称。

const char *psyn = "product/productId:";
char line[100];
pFile = fopen ("pids.txt" , "r");
 if (pFile == NULL) perror ("Error opening file");
else {
    while(fgets (line , sizeof(line) , pFile))
        {
        if (strstr(line, psyn) == line)
            {
            leng = strlen(line);
                    if( line[leng-1] == '\n' )
                        line[leng-1] = 0;
                    if( line[0] == '\n' )
                        line[0] = 0;
            pid = line+strlen(psyn)+1;
                            strcat(pid,t);

            leng = strlen(pid);
                    if( pid[leng-1] == '\n' )
                        pid[leng-1] = 0;

            fd = open(pid, O_RDWR, 0644);
              if (fd == -1)
                               cout<<"eror in file \n";
               else { //.. rest of the program}
4

1 回答 1

0

pid = line+strlen(psyn)+1;
引起了我的怀疑。这里的第一个 strlen() 效率不高。其次,+1 比字符串长一个。

  
诠释 opt_verbose; // 从 -v 选项

    char psyn[] = "产品/productId:"; // 数组,不是指针
    字符线[100];
    文件 *pFile = fopen ("pids.txt" , "r");
     if (pFile == NULL) perror ("错误打开文件");
    别的 {
        while(fgets (line , sizeof(line) , pFile))
        {
            char *s = strstr(line, psyn);
            如果 ( s == 行)
            {
                国际化;
                对于(长度= strlen(线);
                      长度 > 0 && isspace(line[leng-1]);
                      冷——)
                  行[leng-1] = '\0';

                char *pid = line + sizeof(psyn) - 1; // sizeof 不带 \0
                strcat(pid,t);
                长度 = strlen(pid);
                if( pid[leng-1] == '\n' )
                    pid[leng-1] = 0;

                如果 ( opt_verbose )
                    printf("详细:打开 %s\n", pid );
                int fd = open(pid, O_RDWR, 0644);
                如果(fd == -1)
                { // perror 通常不够详细
                    printf( "错误: 打开 \"%s\" 失败: (%d) %s\n",
                                        pid, errno, strerror(errno) );
                           // \"%s\" 很好地显示了路径中的意外空格。
                    继续;
                }
于 2013-06-22T13:02:29.213 回答