Hello,
I am trying to send some characters to a scanner that I have hooked up
to the COM 1 port on my PC. I am running Linux operating system, and I
have the following sample program:
#include <stdio.h>
int main (void)
{
FILE *fd;
fd = fopen("/dev/ttyS0", "w");
fprintf (fd, "2");
fprintf (fd, "B");
<here>
fprintf (fd, "0");
fprintf (fd, "A");
fclose(fd);
return 0;
}
At the <hereline, I would like to send to the device an ASCII "ETX"
character, which is a hex 03. What is the syntax of the fprintf
statement to do this?
Thank you. 8 15593
#include <stdio.h>
int main (void)
{
FILE *fd;
fd = fopen("/dev/ttyS0", "w");
fprintf (fd, "2");
fprintf (fd, "B");
<here>
fprintf (fd, "0");
fprintf (fd, "A");
fclose(fd);
return 0;
}
At the <hereline, I would like to send to the device an ASCII "ETX"
character, which is a hex 03. What is the syntax of the fprintf
statement to do this?
fprintf(fd, "%c", 0x03);
Note: You should also change your other fprintfs to look like:
fprintf(fd, "%c", '2');
etc.
fprintf is expecting a file descriptor, a format argument, and
argument(s) to that. The code you have will work, but is dangerous. I
once had to track down a seg fault where someone had done this:
void foo(char* str) {
fprintf(fd, str);
}
instead of
void foo(char* str) {
fprintf(fd, "%s", str);
}
That worked fine until str contained a percent sign, then it seg
faulted.
Be nice to future programmers; use the correct form.
Michael
In article <11*********************@f16g2000cwb.googlegroups. com>,
<je**********@hotmail.comwrote:
>At the <hereline, I would like to send to the device an ASCII "ETX" character, which is a hex 03. What is the syntax of the fprintf statement to do this?
Choices:
putc(0x03, fd);
fprintf(fd, "\3");
fprintf(fd, "%c", 3);
It is recommended not to use fprintf() if you are not doing any
formatting -- putc() and fputs() and fwrite() are usually more
efficient.
--
I was very young in those days, but I was also rather dim.
-- Christopher Priest
<je**********@hotmail.comwrote in message
news:11*********************@f16g2000cwb.googlegro ups.com...
Hello,
I am trying to send some characters to a scanner that I have hooked up
to the COM 1 port on my PC. I am running Linux operating system, and I
have the following sample program:
#include <stdio.h>
int main (void)
{
FILE *fd;
fd = fopen("/dev/ttyS0", "w");
fprintf (fd, "2");
This will write two characters to 'fd':
'2' and '\0'. Is that what you wanted?
fprintf (fd, "B");
This will write two characters to 'fd':
'B' and '\0'. Is that what you wanted?
<here>
fprintf (fd, "0");
This will write two characters to 'fd':
'0' and '\0'. Is that what you wanted?
fprintf (fd, "A");
This will write two characters to 'fd':
'A' and '\0'. Is that what you wanted?
fclose(fd);
return 0;
}
At the <hereline, I would like to send to the device an ASCII "ETX"
character, which is a hex 03. What is the syntax of the fprintf
statement to do this?
if(fprintf(fd, "%c", (char)3) != 1)
; /* something wrong */
Note that the format specifier for a single character
is %c, not %s.
Also, in all cases, you should be checking the return
value from 'fprintf()'. It can fail, but you won't
know unless you check.
-Mike
In article <5D*******************@newsread2.news.pas.earthlin k.net>,
Mike Wahler <mk******@mkwahler.netwrote:
>fprintf (fd, "2");
>This will write two characters to 'fd': '2' and '\0'. Is that what you wanted?
No it won't. The \0 of the string literal "2" terminates the
format -- otherwise -every- printf and fprintf would put in the
extra \0.
--
"law -- it's a commodity"
-- Andrew Ryan (The Globe and Mail, 2005/11/26) je**********@hotmail.com wrote:
# Hello,
#
# I am trying to send some characters to a scanner that I have hooked up
# to the COM 1 port on my PC. I am running Linux operating system, and I
# have the following sample program:
#
# #include <stdio.h>
#
# int main (void)
# {
# FILE *fd;
#
# fd = fopen("/dev/ttyS0", "w");
# fprintf (fd, "2");
# fprintf (fd, "B");
# <here>
# fprintf (fd, "0");
# fprintf (fd, "A");
You can embed characters except '\0' in a string and print
them out alongside printable character.
So you could do
fputs("2B\x03" "0A",fd);
#define ETX "\x03"
fputs("2B" ETX "0A",fd);
fputc('2',fd); fputc('B',fd); fputc(3,fd); fputc('0',fd); fputc('A',fd);
enum {ETX=3};
fputc('2',fd); fputc('B',fd); fputc(ETX,fd); fputc('0',fd); fputc('A',fd);
fprintf(fd,"2B\x03" "0A");
#define ETX "\x03"
fprintf(fd,"2B" ETX "0A");
enum {ETX=3};
fprintf(fd,"2B%c0A",ETX);
You can sometmes #define strings that make commands and let the
compiler paste them together.
#define ESC "\x1B"
#define BEGIN_ROLE ESC "char("
#define END_ROLE ")"
#define ARTICHOKE_MODE BEGIN_ROLE "poor little artie" END_ROLE
#define CLOTHES_MODE ESC "clothes;"
#define CLOSE "\x18"
printf(
CLOSE "B" CLOTHES_MODE
CLOSE ARTICHOKE_MODE
"\nWhy he's just a rainbow!\n");
--
SM Ryan http://www.rawbw.com/~wyrmwif/
No pleasure, no rapture, no exquisite sin greater than central air.
"Walter Roberson" <ro******@ibd.nrc-cnrc.gc.cawrote in message
news:eh**********@canopus.cc.umanitoba.ca...
In article <5D*******************@newsread2.news.pas.earthlin k.net>,
Mike Wahler <mk******@mkwahler.netwrote:
>>fprintf (fd, "2");
>>This will write two characters to 'fd': '2' and '\0'. Is that what you wanted?
No it won't. The \0 of the string literal "2" terminates the
format -- otherwise -every- printf and fprintf would put in the
extra \0.
Oops, you're right; I was thinking of 'sprintf()'.
-Mike
Groovy hepcat Mike Wahler was jivin' on Sat, 21 Oct 2006 02:24:39 GMT
in comp.lang.c.
Re: how to print ASCII "ETX" character?'s a cool scene! Dig it!
>"Walter Roberson" <ro******@ibd.nrc-cnrc.gc.cawrote in message news:eh**********@canopus.cc.umanitoba.ca...
>In article <5D*******************@newsread2.news.pas.earthlin k.net>, Mike Wahler <mk******@mkwahler.netwrote:
>>>fprintf (fd, "2");
>>>This will write two characters to 'fd': '2' and '\0'. Is that what you wanted?
No it won't. The \0 of the string literal "2" terminates the format -- otherwise -every- printf and fprintf would put in the extra \0.
Oops, you're right; I was thinking of 'sprintf()'.
No you weren't, because that does the same thing as fprintf(), but
sending its output to memory rather than a file.
--
Dig the even newer still, yet more improved, sig! http://alphalink.com.au/~phaywood/
"Ain't I'm a dog?" - Ronny Self, Ain't I'm a Dog, written by G. Sherry & W. Walker.
I know it's not "technically correct" English; but since when was rock & roll "technically correct"?
Groovy hepcat Peter "Shaggy" Haywood was jivin' on Tue, 24 Oct 2006
03:53:53 GMT in comp.lang.c.
Re: how to print ASCII "ETX" character?'s a cool scene! Dig it!
>Groovy hepcat Mike Wahler was jivin' on Sat, 21 Oct 2006 02:24:39 GMT in comp.lang.c. Re: how to print ASCII "ETX" character?'s a cool scene! Dig it!
>>"Walter Roberson" <ro******@ibd.nrc-cnrc.gc.cawrote in message news:eh**********@canopus.cc.umanitoba.ca...
>>In article <5D*******************@newsread2.news.pas.earthlin k.net>, Mike Wahler <mk******@mkwahler.netwrote:
fprintf (fd, "2");
This will write two characters to 'fd': '2' and '\0'. Is that what you wanted?
No it won't. The \0 of the string literal "2" terminates the format -- otherwise -every- printf and fprintf would put in the extra \0.
Oops, you're right; I was thinking of 'sprintf()'.
No you weren't, because that does the same thing as fprintf(), but sending its output to memory rather than a file.
Of course, it does store a '\0' at the end. So perhaps you were
thinking of sprintf() after all. :)
--
Dig the even newer still, yet more improved, sig! http://alphalink.com.au/~phaywood/
"Ain't I'm a dog?" - Ronny Self, Ain't I'm a Dog, written by G. Sherry & W. Walker.
I know it's not "technically correct" English; but since when was rock & roll "technically correct"? This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Sam Halliday |
last post by:
i want to have a function which can print the printable form (possibly a 2
character string) of a character on UNIX like systems. for example, if i were to
pass the ascii value '\3', i would like...
|
by: Sagaert Johan |
last post by:
Hi
I am construncting a string containing some control chars (STX/ETX)
I noticed that adding a byte with value 2 is the same as adding a character
'2' ???
How can i solve this problem ?...
|
by: nephish |
last post by:
Hello there,
i need to write a script that can transfer info back and forth with a
data server at so-and-so ip.
i have Programming Python, which covers socket programming. So thats
cool. But...
|
by: FrankvdHorst |
last post by:
Hallo,
In an application that I'm creating I want to display ☻ and ♥ in a
standard textbox. In this message they are displayed correctly. But
when I'm programming in Visual Studio my textbox...
|
by: mdh |
last post by:
I wrote a little insignificant program, to help me write a more
significant one!!...that was supposed to print all Ascii values from 0
to 127:
>>>>
#include <stdio.h>
# define UPPER_LIMT 127...
|
by: LLcoolQ |
last post by:
I am writing an interface file to a vendor. The requirements say:
Format of the text: Text must be in the format as you would like it to
appear without embedded newline characters. Instead of...
|
by: dattts |
last post by:
what is the difference between a single character and a string
consisting only one character
|
by: BruceMcF |
last post by:
On Mar 11, 8:04 am, billg...@cs.uofs.edu (Bill Gunshannon) wrote:
Precisely. What makes ASCII NUL an appropriate terminator for
terminated strings is that fact that it is defined *in* ASCII as...
|
by: harrelson |
last post by:
I have a large amount of data in a postgresql database with the
encoding of SQL_ASCII. Most recent data is UTF-8 but data from
several years ago could be of some unknown other data type. Being...
|
by: Rina0 |
last post by:
Cybersecurity engineering is a specialized field that focuses on the design, development, and implementation of systems, processes, and technologies that protect against cyber threats and...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 2 August 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: linyimin |
last post by:
Spring Startup Analyzer generates an interactive Spring application startup report that lets you understand what contributes to the application startup time and helps to optimize it. Support for...
|
by: erikbower65 |
last post by:
Here's a concise step-by-step guide for manually installing IntelliJ IDEA:
1. Download: Visit the official JetBrains website and download the IntelliJ IDEA Community or Ultimate edition based on...
|
by: kcodez |
last post by:
As a H5 game development enthusiast, I recently wrote a very interesting little game - Toy Claw ((http://claw.kjeek.com/))。Here I will summarize and share the development experience here, and hope it...
|
by: DJRhino1175 |
last post by:
When I run this code I get an error, its Run-time error# 424 Object required...This is my first attempt at doing something like this. I test the entire code and it worked until I added this -
If...
|
by: Rina0 |
last post by:
I am looking for a Python code to find the longest common subsequence of two strings. I found this blog post that describes the length of longest common subsequence problem and provides a solution in...
|
by: DJRhino |
last post by:
Private Sub CboDrawingID_BeforeUpdate(Cancel As Integer)
If = 310029923 Or 310030138 Or 310030152 Or 310030346 Or 310030348 Or _
310030356 Or 310030359 Or 310030362 Or...
|
by: Mushico |
last post by:
How to calculate date of retirement from date of birth
| |