我希望我的程序能够在没有警告的情况下使用clang进行编译.该功能似乎在编译时有效但为什么?我该如何处理警告?
$ clang cpu-disk-info.c
cpu-disk-info.c:108:17: warning: implicit declaration of function 'read' is
      invalid in C99 [-Wimplicit-function-declaration]
    while ((n = read(0, buf, betterSIZE)) > 0)
                ^
cpu-disk-info.c:109:5: warning: implicit declaration of function 'write' is
      invalid in C99 [-Wimplicit-function-declaration]
    write(1, buf, n);
    ^
码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1024
#define betterSIZE 4*SIZE /* read a better size at a time */
int main(int argc, char **argv)
{
    /* copy(); */
    /* make the names known */
    void info(char file_name[]);
    void buffered(char file_name[]);
    void better_buffered(char file_name[]);
   /* test */
    clock_t toc;
    clock_t tic = clock();
    info("coreutils_8.13.orig.tar.gz"); 
    info("coreutils_8.13.orig.tar.gz"); 
    info("coreutils_8.13.orig.tar.gz"); 
    info("coreutils_8.13.orig.tar.gz"); 
    info("coreutils_8.13.orig.tar.gz"); 
    toc = clock();
    printf("Unbuffered: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);
    tic = clock();    
    buffered("coreutils_8.13.orig.tar.gz"); 
    buffered("coreutils_8.13.orig.tar.gz"); 
    buffered("coreutils_8.13.orig.tar.gz"); 
    buffered("coreutils_8.13.orig.tar.gz");
    buffered("coreutils_8.13.orig.tar.gz"); 
    toc = clock();
    printf("Buffered: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);
    tic = clock();    
    better_buffered("coreutils_8.13.orig.tar.gz"); 
    better_buffered("coreutils_8.13.orig.tar.gz"); 
    better_buffered("coreutils_8.13.orig.tar.gz"); 
    better_buffered("coreutils_8.13.orig.tar.gz");
    better_buffered("coreutils_8.13.orig.tar.gz"); 
    toc = clock();
    printf("Better buffered: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);
    return 0;
}
void info(char file_name[])
{
    int ch;
    FILE *fp;
    fp = fopen(file_name,"r");
    // read mode
    if (fp == NULL)
    {
        perror(file_name);
        exit(EXIT_FAILURE);
    }
    while ((ch = fgetc(fp)) != EOF)
    {
        //putchar(ch);
    }
    fclose(fp);
}
void buffered(char file_name[])
{
    char buf[SIZE];
    FILE *fp;
    size_t nread;
    fp = fopen(file_name, "r");
    if (fp) {
        while ((nread = fread(buf, 1, sizeof buf, fp)) > 0)
    {
            //fwrite(buf, 1, nread, stdout);
    }
        if (ferror(fp)) {
            /* to do: deal with error */
        }
        fclose(fp);
    }
}
void better_buffered(char file_name[])
{
    char buf[betterSIZE];
    FILE *fp;
    size_t nread;
    fp = fopen(file_name, "r");
    if (fp) {
        while ((nread = fread(buf, 1, sizeof buf, fp)) > 0)
    {
            //fwrite(buf, 1, nread, stdout);
    }
        if (ferror(fp)) {
            /* to do: deal with error */
        }
        fclose(fp);
    }
}
int copy() /* input2output ie anything to anything */
{
    char buf[betterSIZE];
    int n;
    while ((n = read(0, buf, betterSIZE)) > 0)
    write(1, buf, n);
    return 0;
}
我正在使用ubuntu(并且希望代码也适用于solaris和bsd).
测试
$ ./benchm 
Unbuffered: 0.670000 seconds
Buffered: 0.040000 seconds
Better buffered: 0.020000 seconds
Dan*_*her 15
对于read和write,你必须
#include <unistd.h>
他们没有被宣布stdio.h.