gpt4 book ai didi

c - 多次读取文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:57 24 4
gpt4 key购买 nike

我只是不明白我的代码有什么问题,目标是使用按位异或使用另一个文件作为 key 来加密一个文件。它有效,问题是 while 只执行一次而且还不够。 while 中的 if 语句是为了防止 key 比输入文件短。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。因此,其余的计算将会失败。尝试通过包含 if firective 来避免这种情况:

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);
}

关于c - 多次读取文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com