|
> OSや処理系の絡む話じゃないんだから、そないに怒らいでも。
> 質問があまりに漠然としていることが問題で。
そんなに漠然としているでしょうか? 例も書かれていて、私は質問の意味が
理解できたのでプログラムは簡単に作れました。
最初の質問者の方、このプログラムはあなたの思ったとおりに動きますか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void proc(FILE *fp, char **lines, int n)
{
char buf[1024]; int i = 0, j;
while (fgets(buf, sizeof buf, fp)) {
free(lines[i]);
lines[i] = strdup(buf);
if (lines[i] == NULL) puts("out of memory"), exit(1);
if (++i == n) i = 0;
}
j = i;
do {
if (lines[j])
fputs(lines[j], stdout), free(lines[j]), lines[j] = NULL;
if (++j == n) j = 0;
} while (j != i);
}
int main(int argc, char *argv[])
{
char **lines; int n, i; FILE *fp;
if (argc < 2 || argv[1][0] != '-')
puts("pattern -n [file ...]"), exit(1);
n = atoi(argv[1] + 1);
if (n <= 0) puts("bad lines"), exit(1);
lines = malloc(n * sizeof(char *));
if (lines == NULL) puts("out of memory"), exit(1);
for (i = 0; i < n; i++) lines[i] = NULL;
if (argc == 2)
proc(stdin, lines, n);
else
for (i = 2; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) printf("can't open %s\n", argv[i]), exit(1);
proc(fp, lines, n);
fclose(fp);
}
return 0;
}
|