【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21217

改行文字含め2バイトからなるファイルをつくる
投稿者---ひか(2005/06/02 23:12:53)


コマンド名 モード 行数 ファイル・・・
のような形式でモード(8進数)で指定されたアクセス権で改行文字を含め2バイトからなり、行数(10進数)で指定された行数のテキストファイルを作るという課題がでました。
下記のソースだと\nと\0の2バイトが出力されてしまいemacsでテキストをみると^@が表示されてしまいます。
\0はどうして消せばいいでしょうか?


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

main(int argc, char *argv[])
{
  int   exitstat = 0;
  mode_t        old_umask;
  int   fd;
  mode_t        mode;
  int   i;

  if (argc < 4) {
    fprintf(stderr, "%s: too few arguments\n", argv[0]);
    return 1;
  }
  old_umask = umask((mode_t)0);
  mode = (mode_t)strtol(argv[1], NULL, 8);
  for (i = 3; i < argc; i ++) {
    fd = open(argv[i], O_WRONLY | O_CREAT | O_EXCL, mode);
    if (fd == -1) {
      perror(argv[i]);
      exitstat = 1;
      continue;
    }


    size_t n, i;
    int fd_out;

    n = (size_t)strtol(argv[2], NULL, 10);

    for (i = 0; i < n; i++)
      fd_out = write(fd,"\n", 2);

    close(fd);
  }
  umask(old_umask);
  return exitstat;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:改行文字含め2バイトからなるファイルをつくる 21219 RAPT 2005/06/03 01:02:37
<子記事> Re:改行文字含め2バイトからなるファイルをつくる 21220 おでん 2005/06/03 09:44:50
<子記事> Re:改行文字含め2バイトからなるファイルをつくる 21221 επιστημη 2005/06/03 10:03:32


No.21219

Re:改行文字含め2バイトからなるファイルをつくる
投稿者---RAPT(2005/06/03 01:02:37)


# 開発環境が書いてありませんが…。

> fd_out = write(fd,"\n", 2);
"\n"は 1 バイトなのに書き込むサイズが 2 となっていているので、
このコードは正しくないと思います。
それから、main()関数の宣言が正しくありません。



この投稿にコメントする

削除パスワード

No.21220

Re:改行文字含め2バイトからなるファイルをつくる
投稿者---おでん(2005/06/03 09:44:50)


"改行文字を含め2バイトからなり" と
"\nと\0の2バイトが出力されてしまい"って、
矛盾しているようですが?

それとも"?\n"を期待しています?


この投稿にコメントする

削除パスワード

No.21221

Re:改行文字含め2バイトからなるファイルをつくる
投稿者---επιστημη(2005/06/03 10:03:32)


> 改行文字を含め2バイトからなり…

改行文字は1バイト。残る1バイトには何を?



この投稿にコメントする

削除パスワード

No.21226

解決しました。
投稿者---ひか(2005/06/03 11:41:45)


>> 改行文字を含め2バイトからなり…
>
>改行文字は1バイト。残る1バイトには何を?

すいません。
テキストは%一文字を含む2バイトの文字列、というのを忘れていました。
WRITEで"%\n"にしたら解決しました。
ありがとうございます!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧