私はまったく新しいCです(長い間使用していません)。私はファイルを読み込み、行を数え、整数を2次元配列に格納しようとします。ファイル内の行を数えた後、do while
サイクルの後、ファイルから何も読み取ることができないため、ファイルを再度開く必要があります。値を保存するためにファイルを再度開くのを避ける方法はありますか?ファイル内の行数をカウントした後、ファイルは空になります(最後に)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int disk[10][10];
int i, j, num, row=0, col=4;
int ch;
FILE *diskfile1;
diskfile1 = popen("grep 'sda' /proc/diskstats | awk '{print $4,$6,$8,$10}'", "r");
do {
ch=fgetc(diskfile1);
if(ch=='\n')
row++;
}while(ch != EOF);
FILE *diskfile;
diskfile = popen("grep 'sda' /proc/diskstats | awk '{print $4,$6,$8,$10}'", "r");
for(i = 0; i < row; i++) {
for(j = 0; j < col; j++) {
fscanf(diskfile, "%d ", &num);
disk[i][j] = num;
}
}
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", disk[i][j]);
if(j==col-1)
printf("\n");
}
}
}
お待ちください、これらはファイルではなくパイプ処理です。あなたはそれらから一度しか読むことができません。それは魔法のようにあなたのためにストリーム全体を格納しません。あなたはそれらを巻き戻すことはできません。 – e0k
アレイのメモリを割り当てて、フルになったときに再割り当てして、1回のパスでデータを取得することができます。 –