c多个文件描述符

时间:2018-03-07 16:35:34

标签: c file concatenation

我正在尝试创建一个C程序,用于连接目标文件中两个文件的内容。要做到这一点,我必须同时打开至少2个文件,但我还没弄清楚为什么我不能这样做。下面的两段代码可以充分描述这个问题:

为什么这样做:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>


int main(int argc, char* argv[]){
    size_t fdes = open(argv[1], O_RDONLY);
    void * buf;
    int bytes;
    while ((bytes = (int)read(fdes, buf, 3)) > 0) {
        printf("%s", (char*)buf);
    }
    close(fdes);
    return 0;
}

这不是吗?

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>


int main(int argc, char* argv[]){
    size_t fdes = open(argv[1], O_RDONLY);
    size_t fdes2 = open(argv[2], O_RDONLY);
    void * buf;
    int bytes;
    while ((bytes = (int)read(fdes, buf, 3)) > 0) {
        printf("%s", (char*)buf);
    }
    close(fdes);
    close(fdes2);
    return 0;
}

我可以打开多个文件吗?

1 个答案:

答案 0 :(得分:0)

我做了一些修改,这有效:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>


int main(int argc, char* argv[]){
    size_t fdes = open(argv[1], O_RDONLY);
    size_t fdes2 = open(argv[2], O_RDONLY);
    size_t length = 0;
    char * buf = (char *)malloc(sizeof(char) * length);
    int bytes;

    while ((bytes = (int)read(fdes, buf, sizeof(buf) - 1)) > 0) {
        printf("%s", buf);
    }

    while ((bytes = (int)read(fdes2, buf, sizeof(buf) - 1)) > 0) {
        printf("%s", buf);
    }
    close(fdes);
    close(fdes2);
    return 0;
}

首先,buf应为char *

其次,您需要将buf指向某处(mallocchar array

参考:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/rtrea.htm