多次读取文件描述符

时间:2014-03-03 20:35:31

标签: c file-io file-descriptor

我只是不明白我的代码有什么问题,目标是使用bitwise xor使用其他文件作为密钥加密一个文件。它的工作原理,问题是while只执行了一次,而这还不够。 while中的if语句是在密钥短于输入文件的情况下。 fd_in,fd_key和fd_out是文件描述符。

while ((numOfBytes = read(fd_in, buf, 4096))!=0){
    numOfBytes_key=read(fd_key, buf_key, numOfBytes);
    if (numOfBytes>numOfBytes_key){
        lseek(fd_in, -(numOfBytes - numOfBytes_key), SEEK_CUR);
        lseek(fd_key, 0, SEEK_SET);
    }
    for (i = 0; i < numOfBytes_key; i++){
        buf_out[i] = buf[i] ^ buf_key[i];
    }
    write(fd_out, buf_out, numOfBytes_key); 
}

1 个答案:

答案 0 :(得分:0)

我猜读取函数会搞砸,因为从空的,不存在的ect文件中读取将返回-1。因此,其余的计算将会下降。试着通过包括火焰来避免这种情况:

while ((numOfBytes = read(fd_in, buf, 4096))!=0)
{
    numOfBytes_key=read(fd_key, buf_key, numOfBytes);
    if (numOfBytes>numOfBytes_key && (numOfBytes >= 0) &&(numOfBytes_key >= 0 ))
    {
        lseek(fd_in, -(numOfBytes - numOfBytes_key), SEEK_CUR);
        lseek(fd_key, 0, SEEK_SET);
    }
    for (i = 0; i < numOfBytes_key; i++){
        buf_out[i] = buf[i] ^ buf_key[i];
    }
    write(fd_out, buf_out, numOfBytes_key); 
}