gpt4 book ai didi

c - 从 `data.in` 读取并在 C 中写入 `data.out` 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:30 27 4
gpt4 key购买 nike

我最近对 ​​fork() 进行了很多试验,目前我正在尝试学习如何处理父进程和子进程。我坚持我正在处理的代码,因为基本上我的程序必须生成一个子进程,它必须打开一个输入文件 data.in,读取前十个和最后十个字符并将它们写入输出文件data.out。 fork 和打开这两个文件都很顺利。我的问题是,当我尝试从 data.in 读取并在 data.out 上写入时,我的程序似乎跳过了循环或进入并跳过了写入部分,我可以'找出原因:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int in_fd;
int out_fd;
int pid;
int read_bytes;
int cursor_position = 0;
char *buffer_in;
char *buffer_out;


if (argc < 3)
{
fprintf(stderr, "Errore: numero di parametri errato.\n");
printf("Utilizzo: ./firstlast10 <file input> <file output>\n");
exit(-1);
}
else if (argc > 3)
{
fprintf(stdout, "Attenzione: numero di parametri errato. Gli input in eccedenza saranno ignorati.\n");
}

out_fd = open(argv[2], O_CREAT|O_RDWR|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO);
if (out_fd < 0)
{
fprintf(stderr, "Errore nell'apertura del file. Errore no. %d.\n", errno);
exit(errno);
}

pid = fork();

if (pid == 0)
{
in_fd = open(argv[1], O_RDONLY);
if (in_fd < 0)
{
fprintf(stderr, "Errore nell'apertura del file. Errore no. %d.\n", errno);
exit(errno);
}

// Read 10 characters from the start.
read(in_fd, buffer_in, 10);

// Write the 10 characters.
write(out_fd, buffer_in, 10);

// Go to 10 characters before the end.
lseek(in_fd, -10, SEEK_END);

// Read last 10 characters.
read(in_fd, buffer_in, 10);

// Write the 10 characters.
write(out_fd, buffer_in, 10);

/*lseek(in_fd, -10, SEEK_END);

while (read(in_fd, buffer_in, 64) > 0 && (lseek(in_fd, 0, SEEK_CUR) < 10))
{
write(out_fd, buffer_out, 64);
}*/

if (close(in_fd) < 0)
{
fprintf(stderr, "Errore nella chiusura del file. Errore no. %d.", errno);
exit(errno);
}

}
else if (pid > 0)
{

}
else
{
fprintf(stderr, "Errore nella creazione del processo figlio. Errore no. %d.\n", errno);
exit(errno);
}


if (close(out_fd) < 0)
{
fprintf(stderr, "Errore nella chiusura del file. Errore no. %d.", errno);
exit(errno);
}

return 0;
}

希望您能帮助我阐明我的代码发生了什么。

最佳答案

它可以比你拥有的更简单:

// Read 10 characters from the start.
read(in_fd, buffer_in, 10);

// Write the 10 characters.
write(out_fd, buffer_in, 10);

// Go to 10 characters before the end.
lseek(in_fd, -10, SEEK_END)

// Read last 10 characters.
read(in_fd, buffer_in, 10);

// Write the 10 characters.
write(out_fd, buffer_in, 10);

更新

问题是您将 buffer_in 定义为:

char *buffer_in;

您还没有为它分配任何内存。您看到未定义的行为。将其更改为:

char buffer_in[10];

关于c - 从 `data.in` 读取并在 C 中写入 `data.out` 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23700830/

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