问题描述
所以我遇到的问题是,当将“ int pipefd [2]”行插入到程序中时,它仅到达“ Debug3”一次并在此结束。文件也不会写入任何内容。没有线路,程序正在运行。错误从何而来?我看到声明的“ int数组”蜜蜂与在子进程中执行的for循环之间没有任何联系。
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/wait.h>
int main(int argc,char* argv[]) {
int pipefd[2];
pid_t pid;
int count;
count = atoi(argv[1]);
open("a.txt",O_CREAT);
int fd = open("a.txt",O_RDWR);
switch (pid = fork()) {
case -1:
printf("Failed to create child\n");
exit(EXIT_FAILURE);
break;
case 0:;
char *str;
printf("Debug1\n");
for (int i = 0; i < count; i++) {
printf("Debug2\n");
sleep(1);
printf("Debug3\n");
sprintf(str,"Writer-PID: %d -> record-nr: %6d\n",getpid(),i);
printf("Debug4\n");
write(fd,str,strlen(str));
}
printf("Debug5\n");
close(fd);
break;
default:
wait(&pid);
break;
}
return 0;
}
解决方法
char* str;
这将str
定义为char指针,但没有给它指向的位置,也没有为其分配任何内存。它尚未初始化。如果要分配一些长度已知的空间,则可以将其声明为数组:
char str[100];
如果您的长度在编译时未知,则应使用malloc
和free
:
char* str = malloc(size_to_allocate * sizeof(char));
// code here
free(str); // to avoid memory leak