プロが教えるわが家の防犯対策術!

まだC言語を習い始めて間もないため初歩的な質問になってしまうことをご了承ください

現在講義の一環で電子メールの送信について学んでいます
開発環境はWindows上に仮想OSとしてUbuntu14.01で開発しています
電子メールの送信自体はネットで調べてmailコマンドとvimコマンドで/.mailrcを編集してgmailのsmtpを経由してすぐにできました

さてここからが本題です
次の課題がC言語で実装するということになりました。しかし1から全てC言語で実装というわけではなくsystem関数を使用しても構わないとのことでそれだけならsystem関数でmailコマンドを行うだけでいいのですが/.mailrcの編集やメールの送信内容もC言語で実装することになりました。それでmailコマンドはsystem関数で実装するとしてsmtpの設定をする.mailrcに直接echoで書き込めばいいかと思いまして下のようなプログラムを書いてみました。
char型の中身は仮設定していますがいずれはscanf関数で編集できるようにと考えています。

#include <stdio.h>
#include <stdlib.h>

int main()
{
char hogo[10]="smtps";
char server[30]="smtp.gmail.com";
char port[10]="465";
char SASL[10]="login";
char user[30]="ユーザ名@gmail.com";
char pass[30]="パスワード";
char buff[100];
char buff1[100];

//smtpステータス
printf("set smtp-use-%s\n",hogo);

printf("set smtp=smtps://%s:%s\n",server,port);

printf("set smtp-auth=%s\n",SASL);

printf("set smtp-auth-user=%s\n",user);

printf("set smtp-auth-password=%s\n",pass);

printf("set from=%s\n",user);



sprintf(buff,"echo set smtp-use-%s > /home/.mailrc",hogo);
system(buff);
sprintf(buff1,"echo set smtp=smtps://%s:%s > /home/.mailrc",server,port);
system(buff1);

return 0;
}

きちんと変数が入っているか確認のためprintfで出力してそれをsystem関数でechoで書き込みをしています。それで問題なのですが
sprintf(buff,"echo set smtp-use-%s > /home/.mailrc",hogo);
system(buff);
を実行したときにはきちんと書き込まれているのですが2つ目のsystem関数の
 sprintf(buff1,"echo set smtp=smtps://%s:%s > /home/.mailrc",server,port);
system(buff1);
を実行すると上書きされます。

echoは改行は出力後自動で行っていると思っていたのですが特にそういうとこはなく最後のbuff1のみが残ります。
ここで質問ですが2行目、3行目にechoする方法があれば教えて頂きたいです。
一応sprintf(buff,"echo -e set smtp-use-%s\n> /home/.mailrc",hogo);なんていうのを試してみましたが特に変化はありませんでした。

その他別の方法や先ほどの質問の回答等があればご教授お願い致しますm(__)m

A 回答 (1件)

echoコマンドではなく、普通にfopen()/fprintf()/fclose()でもいいような気もしますが…。




まぁ、ソレはソレとして……

> sprintf(buff1,"echo set smtp=smtps://%s:%s > /home/.mailrc",server,port);
>system(buff1);
>を実行すると上書きされます。

「リダイレクト 追記」辺りで検索してみるといいでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
意外と単純でしたね・・・
fopen()/fprintf()/fclose()の方も試してみたいと思います
このたびはありがとうございました

お礼日時:2016/07/02 18:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています