我在if语句之外声明了一个字符fileName,并在另一个if语句中的if语句中使用它。我想知道如何从if块外部检索并打印我扫描并存储在char文件名中的值。
我的代码段:
char fileName[30] = "";
if(pid2==0){
block of statements here
if(pid3==0){
block of statements here
}else if(pid3==-1){
block of statements here
}else{
printf ("\t CHILD2: Enter a filename: ");
scanf ("%s", fileName);
...
}
}else if(pid2==-1){
block of statements here
}else{
printf ("\t CHILD2: %s was successfully created!\n", fileName);
答案 0 :(得分:0)
如果这不是一个需要正确的进程间通信的家庭作业,而你只需要完成它,你可以做如下的事情:
char whereIStoreMyData = "file.tmp"
// fork...
if(pid2==0){
block of statements here
if(pid3==0){
block of statements here
}else if(pid3==-1){
block of statements here
}else{
printf ("\t CHILD2: Enter a filename: ");
scanf ("%s", fileName);
FILE* fp = fopen(whereIStoreMyData, "w");
fprintf(fp, "%s\n");
fclose(fp);
...
}
}else if(pid2==-1){
block of statements here
}else{
FILE* fp;
while ((fp = fopen("whereIStoreMyData", "r")) == NULL) {
sleep(1000) // wait 1 second
}
fscanf(fp, "%s\n", fileName);
fclose(fp);
printf ("\t CHILD2: %s was successfully created!\n", fileName);
}
这不是理想的代码(你应该使用fgets,或其他更好的函数,例如),但是显示了基本的逻辑流概念。
如果您需要更正式的内容,请查看进程间通信(IPC)的形式,例如管道(最常用于此)或共享内存。网上有大量的参考文献,其中包括fork() and pipes() in c。
答案 1 :(得分:-1)
使用gets(fileName);
代替scanf ("%s", fileName);
因为scanf();将在输入中出现空格时终止输入,而当您按ENTER时,gets()将终止。希望这会奏效。如果要输入超过29个字符,请使用大数而不是30。即:将fileName[30];
更改为fileName[90]