如何使用C(linux)中的管道将GCC的输出保存在文件中?

时间:2014-04-30 19:22:33

标签: c linux gcc

执行时,文件创建运行良好......但没有任何内容写入...可以做什么...除了使用文件描述符之外还有其他方法吗?? ??

我尝试了以下代码:

    memset(buffer, '\0', sizeof(buffer));
    read_fp = popen("gcc test1.c", "r");
    //fp = fopen("/home/pranav/Desktop/b4.txt","w");
    fd = open("beejoutput2.txt", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP  |         S_IROTH);
    if (read_fp != NULL)
    {

        chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
        while (chars_read > 0)
        {

    /*writing to the file*/
        while ((bytesread = read(3, buffer, chars_read)) > 0) 
                write(fd, buffer, bytesread);

        buffer[chars_read-1] = '\0';
        printf("Reading %d:-\n %s\n", BUFSIZ, buffer);
        //fprintf(fp,"%d:-\n %s\n", BUFSIZ, buffer);
        chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
        }



    pclose(read_fp);
    exit(EXIT_SUCCESS);
    }
    //fclose(fp);
    exit(EXIT_FAILURE);
    return 0;
    }

2 个答案:

答案 0 :(得分:1)

错误消息将在stderr上,因此请更改此

  

read_fp = popen(" gcc test1.c"," r");

到这个

  

read_fp = popen(" gcc test1.c 2>& 1"," r");

答案 1 :(得分:1)

  1. 您应该测试 open write 的输出,因为它们会失败。
  2. 您不应该直接使用 open write 之类的系统调用,它们具有可移植的C包装,如 fopen fwrite
  3. 最后关闭所有内容。