繁体   English   中英

多次读取文件描述符

[英]read file descriptor multiple times

我只是不明白我的代码有什么问题,目标是使用按位异或将另一个文件用作密钥来加密一个文件。 它有效,问题是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); 
}

我猜读取函数会使事情搞砸了,因为从空的,不存在的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); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM