c언어 문자열에서 공백 또는 특정 문자 제거

프로그래밍/C, C++|2020. 9. 21. 09:43
반응형

char msg[100];

char msgN[100];
 
sprintf(msg, "This is text.");
 
int i = 0, c = 0; // 쌍따옴표 제거
for(; i < strlen(msg); i++)
{
    //if (isalnum(msg[i]))  // msg 문자(a-z, A-Z, 0-9)를 제외한 모든것 제거하고 싶은 경우 사용
    if (msg[i] != '\"')             // msg 에서 쌍따옴표 제외하는것이 목적일 경우
    {
        msgN[c] = msg[i];
        c++;
    }
}
msgN[c] = '\0';
 

 

msg 에 있던 This is text. 가

msgN 에서는 변경된 조건으로 저장되어 집니다.

 

 

반응형

댓글()

c언어 변수를 이용해 시스템 명령어 사용

프로그래밍/C, C++|2020. 9. 21. 09:04
반응형

char cmd[100];

sprintf(cmd, "ls /home/%s", username);

system(cmd);

 

* 설명

값이 들어 있는 username 을 가져와서 명령을 수행하기위해 만들어 놓은 변수 cmd 에 넣고

system() 함수를 이용해 실행한다.

 

반응형

댓글()

c언어 현재 날짜 및 시간 출력

프로그래밍/C, C++|2020. 9. 14. 11:11
반응형

# vi test.c


#include <stdio.h>

#include <time.h>

#include <sys/timeb.h>

#include <sys/time.h>


int main ()

{

        struct timeval tv;

        struct timezone tz;

        struct tm *tm;

        gettimeofday(&tv, &tz);

        tm = localtime(&tv.tv_sec);


        printf("%04d-%02d-%02d %02d:%02d:%02d.%06d\n", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec);


        return 0;

}



# gcc test.c -o test


# ./test
2020-09-14 11:10:59.496912


반응형

댓글()

[fping] network 대역으로 ping 체크하기

리눅스/Network|2020. 9. 14. 07:32
반응형

패키지 설치

# apt install fping

 

버전 확인

# fping --version
fping: Version 4.2

 

스캐닝

# fping -g 192.168.10.0/24

 

1개 호스트 포트 체크 (다운된 서버도 10 milliseconds 이내 응답)

# fping -t 10 192.168.10.2

 

PHP 에서 실행할때

$cmd = "/usr/sbin/fping -t 10 192.168.10.2";
$check = shell_exec($cmd);

echo $check;

 

반응형

댓글()

MySQL 8 계정 패스워드 변경 (일반 변경, 분실 변경)

리눅스/MySQL|2020. 9. 1. 15:45
반응형

아래는 root 계정의 패스워드를 변경하는 방법입니다.

 

 

1) root 패스워드를 알고 있을 경우

 

(mysql 로그인 후)

mysql> use mysql;

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;

 

* 위에서 패스워드 암호형식은 mysql_native_password 또는 caching_sha2_password 가 있습니다.

 

2) root 패스워드를 모를 경우

 

# systemctl stop mysql

 

패스워드를 체크하지 않도록 설정 파일 옵션 추가

- 설정 파일 : /etc/mysql/mysql.conf.d/mysql.cnf

- 추가 옵션 : [mysqld] 섹션에 아래 옵션 추가

                       skip-grant-tables

 

# systemctl start mysql

 

# mysql -p

Enter password: (비밀번호 없이 그냥 엔터)

 

(mysql 로그인 후)

mysql> use mysql;

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;

 

* 위에서 패스워드 암호형식은 mysql_native_password 또는 caching_sha2_password 가 있습니다.

 

설정 파일 옵션 제거 후 다시 mysql 재시작

 

# systemctl restart mysql

 

반응형

댓글()

Let's encrypt 설치 및 무료 SSL 인증서 발급 받기 (Ubuntu 20.04, 22.04)

리눅스/APACHE|2020. 9. 1. 13:07
반응형

무료 SSL 인증서를 발급받는 방법입니다.

단, 기간은 3개월이며 만료 한 달 전부터 갱신을 할 수 있습니다.

방법은 아래와 같습니다.

 

1. Let's encrypt 설치

 

root@sysdocu:~# apt -y install letsencrypt

 

2. 인증서 발급

 

(단일 도메인 SSL 발급)

root@sysdocu:~# letsencrypt certonly -a webroot --agree-tos -m [이메일] -w [웹소스 디렉토리] -d [SSL 도메인명] --rsa-key-size 4096

 

(다중 도메인 SSL 발급)

root@sysdocu:~# letsencrypt certonly -a webroot --agree-tos -m [이메일] -w [웹소스 디렉토리] -d [SSL 도메인명] -w [웹소스 디렉토리] -d [SSL 발급도메인명] --rsa-key-size 4096

 

이와 같이 실행하면 웹페이지가 정상 접근 가능한 상태일때 인증서가 발급되어 집니다.

아래 디렉토리로 이동하여 인증서 파일을 확인합니다.

 

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/[도메인]/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/[도메인]/privkey.pem

 

3. 인증서 설정

 

실제 인증서는 /etc/letsencrypt/archive/[도메인] 에 있으나, 인증서를 업데이트 할때마다 파일명이 바뀌므로

아래 위치에 있는 심볼록 링크 파일을 virtualhost 설정 항목에 넣어 주어야 자동으로 갱신된 인증서로 연결 가능합니다.

 

<VirtualHost *:443>

DocumentRoot [웹소스 디렉토리]

ServerName [도메인명]:443

...

SSLEngine on

SSLCertificateFile /etc/letsencrypt/live/[도메인명]/cert.pem

SSLCertificateKeyFile /etc/letsencrypt/live/[도메인명]/privkey.pem

SSLCertificateChainFile /etc/letsencrypt/live/[도메인명]/fullchain.pem

</VirtualHost>

 

수정 후 apache2 를 재시작하여 적용 합니다.

 

root@sysdocu:~# systemctl restart apache2

 

 

4. 인증서 갱신

 

root@sysdocu:~# vi /root/ssl-renew.sh

#!/bin/bash
/usr/bin/letsencrypt certonly -a webroot --agree-tos --renew-by-default -w [웹소스 디렉토리] -d [SSL 도메인명]
systemctl restart apache2

root@sysdocu:~# chmod 700 /root/ssl-renew.sh

 

두 달에 한 번씩 1일, 16일에 갱신 시도를 하도록 설정 합니다.

 

root@sysdocu:~# echo "01 00 01,16 */2 * root sh /root/ssl-renew.sh" >> /etc/crontab

 

반응형

댓글()

PHP 로 Excel 파일 읽기

프로그래밍/PHP|2020. 8. 21. 08:36
반응형

[출처1] http://www.joshi.co.kr/index.php?mid=board_EudV58&page=7&document_srl=293319

[출처2] https://wickedmagic.tistory.com/584


출처의 내용을 진행하며 제가 필요한 내용으로 수정 하였습니다.



1. PHP 설치 필수 모듈 설치 (Ubuntu 18.04 기준)


# apt install php7.2-zip php7.2-xml php7.2-gd



2. PHPExcel-1.8.0 다운로드


https://github.com/PHPOffice/PHPExcel 에 접속해 압축파일을 통째로 다운로드 받고

소스 최상위 디렉토리에 압축해제 하면 아래와 같은 디렉토리가 생성 됩니다.


./PHPExcel-1.8.0



3. Excel 파일 업로드


아래 내용으로 file.xlsx 파일을 만들어서 소스 최상위 디렉토리에 업로드 했습니다.

1

아무개 

10

 2

귀요미

12 



4. Excel 읽는 PHP 코드 생성


# vi excel_upload.php


<html>

<form enctype="multipart/form-data" action="./excel_read.php" method="post">

<table border="1">

<tr>

<th style="background-color:#DCDCDC">파일</th>

<td><input type="file" name="excelFile"/></td>

</tr>

<tr>

<th style="background-color:#DCDCDC">등록</th>

<td style="text-align:center;"><input type="submit" value="업로드"/></td>

</tr>

</form>

</html> 



# vi excel_read.php


<?

require_once "./PHPExcel-1.8.0/Classes/PHPExcel.php"; // PHPExcel.php을 불러와야 하며, 경로는 사용자의 설정에 맞게 수정해야 한다.

$objPHPExcel = new PHPExcel();

require_once "./PHPExcel-1.8.0/Classes/PHPExcel/IOFactory.php"; // IOFactory.php을 불러와야 하며, 경로는 사용자의 설정에 맞게 수정해야 한다.


//$filename = './file.xlsx'; // 서버에 올려진 파일을 직접 지정할 경우


// excel_upload.php 파일을 이용해 업로드 한 경우

$filename = $_FILES['excelFile']['tmp_name'];


try {

    // 업로드 된 엑셀 형식에 맞는 Reader객체를 만든다.

    $objReader = PHPExcel_IOFactory::createReaderForFile($filename);


    // 읽기전용으로 설정

    $objReader->setReadDataOnly(true);


    // 엑셀파일을 읽는다

    $objExcel = $objReader->load($filename);


    // 첫번째 시트를 선택

    $objExcel->setActiveSheetIndex(0);

    $objWorksheet = $objExcel->getActiveSheet();

    $rowIterator = $objWorksheet->getRowIterator();

    foreach ($rowIterator as $row) { // 모든 행에 대해서

               $cellIterator = $row->getCellIterator();

               $cellIterator->setIterateOnlyExistingCells(false);

    }


    $maxRow = $objWorksheet->getHighestRow();


    for ($i = 0 ; $i <= $maxRow ; $i++) {

               $no = $objWorksheet->getCell('A' . $i)->getValue(); // A열

               $name = $objWorksheet->getCell('B' . $i)->getValue(); // B열

               $age = $objWorksheet->getCell('C' . $i)->getValue(); // C열

               echo $no . ", " . $name . ", " . $age . "<br>";

    }

}


catch (exception $e) {

    echo "엑셀 파일을 읽는 도중 오류가 발생 하였습니다.";

}

?>



반응형

댓글()

원격 DB 테이블 연결하기

리눅스/MySQL|2020. 8. 13. 11:03
반응형

DB1 에서 우선 테이블 생성(일반적인 create 문, 물론 이미 생성된 table을 사용해도 된다. 테스트를 위해 새로 create)

 

CREATE TABLE `db_test1` (
  `a1` varchar(10) DEFAULT NULL,
  `a2` varchar(10) DEFAULT NULL,
  `a3` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

DB2 에서 federated 테이블을 생성해야 한다.

 

CREATE TABLE `db_test1` (
  `a1` varchar(10) DEFAULT NULL,
  `a2` varchar(10) DEFAULT NULL,
  `a3` varchar(11) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8

CONNECTION='mysql://접속ID:패스워드@도메인(또는 IP):포트/datebase명(ex:DB1)/테이블명(ex:db_test1)';

 

주의)

1. 컬럼명을 똑같이 맞춰줘야 한다.

2. 원본 데이터 db에 스키마가 바뀌면, federated 테이블을 drop하고 다시 생성해야 한다.

 -> federated 테이블은 스키마 변경 불가. 드랍하고 다시 create해야함

3. 패스워드에 '@' 골뱅이가 들어가면 안된다. 패스워드 변경해야함



출처: https://jang8584.tistory.com/245 [개발자의 길]

 

반응형

댓글()

리스트뷰 (listview) 구분선 제거

프로그래밍/Android (Java)|2020. 7. 31. 16:57
반응형

자동으로 구분선이 생기므로 아래 옵션을 이용해 없애줍니다.


<ListView

    android:id="@+id/lv"

    android:dividerHeight="0px"

    android:divider="#FFFFFF" />



반응형

댓글()

안드로이드 상태바 없애기 (시계, 알림 아이콘 부분)

프로그래밍/Android (Java)|2020. 7. 24. 09:42
반응형
안드로이드 상태바를 없애 화면을 좀 더 넓어 보이게 할 수 있습니다.

// 상태바 없애기 (안드로이드 상단 시간, 알림 아이콘 부분)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_main); // 이것 전에 사용해야 함




반응형

댓글()

마우스 오버 이미지 미리보기 (썸네일 확인)

반응형

동적으로 이미지 리스트를 생성 할때 on을 사용하여 이미지 확대 하는 소스 입니다.

body 에 p 태그를 선언하고 해당 테그 안에 이미지를 넣어 보여주는 소스 입니다.


<html>

    <head>

        <title>Test</title>

        <script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>

        <script type="text/javascript">

            $(document).ready(function() {

                 

                var xOffset = 10;

                var yOffset = 30;


                $(document).on("mouseover",".thumbnail",function(e){ //마우스 오버시

$("body").append("<p id='preview'><img src='"+ $(this).attr("src") +"' width='400px' /></p>"); //보여줄 이미지를 선언  

$("#preview")

.css("top",(e.pageY - xOffset) + "px")

.css("left",(e.pageX + yOffset) + "px")

.fadeIn("fast"); //미리보기 화면 설정 셋팅

});

$(document).on("mousemove",".thumbnail",function(e){ //마우스 이동시

$("#preview")

.css("top",(e.pageY - xOffset) + "px")

.css("left",(e.pageX + yOffset) + "px");

});

$(document).on("mouseout",".thumbnail",function(){ //마우스 아웃시

$("#preview").remove();

});

                 

            });

        </script>

            

<style>

/* 미리보기 스타일 셋팅 */

#preview{

z-index: 9999;

position:absolute;

border:0px solid #ccc;

background:#333;

padding:1px;

display:none;

color:#fff;

}

</style>

    </head>

     

    <body>

        <img src="https://www.gstatic.com/webp/gallery/1.sm.jpg" class="thumbnail" height='50px' />

    </body>

</html>


[미리보기]

참고: http://cssglobe.com/easiest-tooltip-and-image-preview-using-jquery/



[출처] https://huskdoll.tistory.com/m/292?category=559073

반응형

댓글()