JR中央線・三鷹駅
南口 徒歩3分

[ 地図 ]
TOP 学習環境 SQL C言語 Java

 C言語の基礎(5)
    プログラムを小分けに分割して、見やすく、分かりやすく、少しずつ作ります
ファイル分割
  1. テキストエディタで ciapia.h を作成する
  2. /**********************************************************
    *	ヘッダーファイル
    */
    extern	void	sub_1();
    extern	void	sub_2(int);
    extern	char	*sub_3();

  3. テキストエディタで ciapia1.c を作成する
  4. /**********************************************************
    *	主処理
    */
    #include	<stdio.h>
    #include	"ciapia.h"
    
    int	main(){
    	sub_1();
    	sub_2(120);
    	printf( "戻値: %s\n", sub_3() );
    }		

  5. テキストエディタで ciapia2.c を作成する
  6. /**********************************************************
    *	sub_1:サブルーチン
    */
    #include	<stdio.h>
    #include	"ciapia.h"
    void	sub_1(){
    	printf( "Hello,,,\n" );
    }		

  7. テキストエディタで ciapia3.c を作成する
  8. /**********************************************************
    *	sub_2:関数(データ渡し)
    */
    #include	<stdio.h>
    #include	"ciapia.h"
    void	sub_2(int iVal){
    	printf( "入力値は %d です\n", iVal );
    }		

  9. テキストエディタで ciapia4.c を作成する
  10. /**********************************************************
    *	sub_3:関数(戻り値)
    */
    #include	<stdio.h>
    #include	"ciapia.h"
    char	*sub_3(){
    	return ("sub_3()");
    }		

  11. ソースファイルをコンパイルし実行ファイルを作成する
  12. $ gcc -o ciapia ciapia1.c ciapia2.c ciapia3.c ciapia4.c

  13. 実行ファイルを起動する
  14. $ ./ciapia
makefile
  1. テキストエディタで dba.h を作成する
  2. /**********************************************************
    *	ヘッダーファイル
    */
    #include	<libpq-fe.h>
    
    #define	DB_NAME		""
    #define	DB_USER		"postgres"
    #define	DB_PWD		"pgAdmin"
    extern	PGconn		*pCon;
    extern	PGresult	*pRes;
    
    extern	int	dbLogin();
    extern	int	dbIns(char *);
    extern	int	dbList();
    extern	void	dbLogout();		

  3. テキストエディタで dba.c を作成する
  4. /**********************************************************
    *	主処理
    */
    #include	<stdio.h>
    #include	<stdlib.h>
    #include	<string.h>
    #include	"dba.h"
    
    PGconn		*pCon;
    PGresult	*pRes;
    
    int main( int iInp, char *pInp[] ){
    	if( dbLogin()==0 ){
    		if( ( iInp < 1 ) && ( strlen( pInp[1] ) < 100 ) ){
    			/// 入力データを登録する
    			dbIns( pInp[1] );
    		}
    		/// データ抽出
    		dbList();
    
    		/// DB切断
    		dbLogout();
    	}
    }

  5. テキストエディタで dbLogin.c を作成する
  6. /**********************************************************
    *	DB接続
    */
    #include	"dba.h"
    
    int	dbLogin(){
    	/// DB接続
    	pCon = PQsetdbLogin( "", "", NULL, NULL, DB_NAME, DB_USER, DB_PWD );
    	if( PQstatus( pCon ) == CONNECTION_BAD ){
    		printf( "DB接続エラー: %s\n", PQerrorMessage( pCon ) );
    		return(1);
    	}
    	return(0);
    }

  7. テキストエディタで dbIns.c を作成する
  8. /**********************************************************
    *	データ登録
    */
    #include	<string.h>
    #include	"dba.h"
    
    /// データ登録
    int	dbIns( char *ptr ){
    	char	sSql[1000];
    
    	sprintf( sSql, "insert into 伝言板(伝言) values('%s')", ptr );
    	pRes = PQexec( pCon, sSql );
    	if( PQresultStatus( pRes ) != PGRES_COMMAND_OK ){
    		PQclear( pRes );
    		printf( "データ登録: %s", PQerrorMessage( pCon ) );
    		return(1);
    	}
    	PQclear( pRes );
    	return(0);
    }

  9. テキストエディタで dbList.c を作成する
  10. /**********************************************************
    *	データ抽出・出力
    */
    #include	<stdlib.h>
    #include	"dba.h"
    
    int	dbList(){
    	int	ii, iCnt;
    
    	/// データ抽出
    	pRes = PQexec( pCon, "select 番号,to_char(登録日,'MM/DD HH24:MI'),伝言 "
    			"from 伝言板 order by 番号 desc limit 10;" );
    	if( PQresultStatus( pRes ) != PGRES_TUPLES_OK ){
    		printf( "データ抽出: %s\n", PQerrorMessage( pCon ) );
    		return(4);
    	}
    
    	/// 抽出データ出力
    	iCnt = PQntuples( pRes );
    	for( ii=0; ii<iCnt; ii++ ){
    		printf( "%4d [%s] %s\n"
    			, atoi( PQgetvalue( pRes, ii, 0 ) )
    			, PQgetvalue( pRes, ii, 1 )
    			, PQgetvalue( pRes, ii, 2 ) );
    	}
    	PQclear( pRes );
    	return(0);
    }

  11. テキストエディタで dbLogout.c を作成する
  12. /**********************************************************
    *	DB切断
    */
    #include	"dba.h"
    
    void	dbLogout(){
    	PQfinish( pCon );
    }

  13. テキストエディタで makefile を作成する
  14. ### Define
    POSTGRES_INC=/usr/include/postgresql
    CFLG=-I./ -I$(POSTGRES_INC) -Wall -fPIC
    LFLG=-Wall -O2
    OBJS=dba.o dbLogin.o dbIns.o dbList.o dbLogout.o
    ULIB=-lpq
    TARGET=dba
    
    all:	$(TARGET)
    
    ### Link
    $(TARGET): $(OBJS)
    	gcc $(LFLG) -o $(TARGET) $(OBJS) $(ULIB)
    
    ### Compile
    dba.o: dba.c dba.h
    	gcc -c $(CFLG) $<
    
    dbLogin.o: dbLogin.c dba.h
    	gcc -c $(CFLG) $<
    
    dbIns.o: dbIns.c dba.h
    	gcc -c $(CFLG) $<
    
    dbList.o: dbList.c dba.h
    	gcc -c $(CFLG) $<
    
    dbLogout.o: dbLogout.c dba.h
    	gcc -c $(CFLG) $<
    
    ### Clean
    clean:
    	rm -f *.o

  15. ソースファイルをコンパイルし実行ファイルを作成する
  16. $ make

  17. 実行ファイルを起動する
  18. $ ./dba こんにちは
C言語(1) C言語(2) C言語(3) C言語(4) C言語(5)
Copyright© Ciapia IT Academy 2022.