1. 程式人生 > >Linux C學習筆記——txt檔案讀寫

Linux C學習筆記——txt檔案讀寫

  /*************** perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。 FILE * fopen(const char * path, const char * mode);返回值:檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回 NULL,並把錯誤程式碼存在 error 中。 fgetc()fgetc是一種計算機語言中的函式。意為從檔案指標stream指向的檔案中讀取一個字元,讀取一個位元組後,游標位置後移一個位元組。格式:int fgetc(FILE *stream);。 fputc()將字元ch寫到檔案指標fp所指向的檔案的當前寫指標的位置。函式格式:int fputc (int c, FILE *fp)。 exit()  exit(0) 表示程式正常退出,exit⑴/exit(-1)表示程式異常退出。 pid_t wait (int * status);如果執行成功則返回子程序識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno 中。 fprintf是C/C++中的一個格式化寫—庫函式,位於標頭檔案<stdio.h>中,其作用是格式化輸出到一個流/檔案中; 函式原型為int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函式根據指定的格式(format)向輸出流(stream)寫入資料(argument)。 */

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

/***************
perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。
FILE * fopen(const char * path, const char * mode);返回值:檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回 NULL,並把錯誤程式碼存在 error 中。
fgetc()fgetc是一種計算機語言中的函式。意為從檔案指標stream指向的檔案中讀取一個字元,讀取一個位元組後,游標位置後移一個位元組。格式:int fgetc(FILE *stream);。
fputc()將字元ch寫到檔案指標fp所指向的檔案的當前寫指標的位置。函式格式:int fputc (int c, FILE *fp)。
exit()  exit(0) 表示程式正常退出,exit⑴/exit(-1)表示程式異常退出。
pid_t wait (int * status);如果執行成功則返回子程序識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno 中。
fprintf是C/C++中的一個格式化寫—庫函式,位於標頭檔案<stdio.h>中,其作用是格式化輸出到一個流/檔案中;
函式原型為int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函式根據指定的格式(format)向輸出流(stream)寫入資料(argument)。
*/



int main()
{

    pid_t pc;
    pc =fork();
    int status;
    FILE* wp = fopen("out.txt","a");
    if(wp == NULL)
        perror("wp error");
    if(pc <0)
        perror("fork error");
    else if(pc == 0)
    {
        printf("this is child process\n");
        printf("child process is doing\n");
        FILE* fp =NULL;
        int count = 0;
        fp = fopen("in.txt","r");
        int c;
        while((c =getc(fp)) != EOF)
        {
            if(c>='A' && c<='Z')
                count++;
        }
        fclose(fp);
        printf("Upper count:%d\n",count);
        fprintf(wp,"Upper:%d\n",count);
        exit(0);
    }
    else
    {
        printf("this is parent process\n");

        if(wait(&status))
        {
            printf("parent process is doing\n");
            FILE* fp =NULL;
            int count = 0;
            fp = fopen("in.txt","r");
            int c;
            while((c = getc(fp))!=EOF )
            {
                if(c>='a' && c<='z')
                    count++;
            }
            fclose(fp);
            printf("lower count:%d\n",count);
            fprintf(wp,"Lower:%d\n",count);
            fclose(wp);
        }

    }
    FILE* rp = fopen("out.txt","r");
    if(rp == NULL)
        perror("rp error");
    int c;
    while((c = getc(rp))!= EOF)
    {
        fputc(c,stdout);
    }

    return 0;
}