Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.
  1. In Bash, I learned that the ending signal can be changed by here document. But by default how can I signal the end of stdin input?
  2. I happened to find that with cat and chardet, their stdin inputs can be signaled as finished by Ctrl+d. But I seems to remember that Ctrl+d and Ctrl+c are similar to ending execution of a running command. So am I wrong?
share|improve this question

2 Answers 2

up vote 21 down vote accepted

Ctrl+D, when typed at the start of a line on a terminal, signifies the end of the input. This is not a signal in the unix sense: when an application is reading from the terminal and the user presses Ctrl+D, the application is notified that the end of the file has been reached (just like if it was reading from a file and had passed the last byte).

Ctrl+C does send a signal, SIGINT. By default SIGINT (the interrupt signal) kills the foreground application, but the application can catch the signal and react in some different way (for example, the shell itself catches the signal and aborts the line you've begun typing, but it doesn't exit, it shows a new prompt and waits for a new command line).

You can change the characters associated with end-of-file and SIGINT with the stty command, e.g. stty eof a would make a the end-of-file character, and stty intr ^- would disable the SIGINT character. This is rarely useful.

share|improve this answer
    
Thanks! DoesCtrl+D mean Ctrl and capital D or it doesn't matter? –  Tim Jul 9 '11 at 16:31
    
@Tim: it's lower case you want ... the convention of writing keyboard commands with capitals comes because the labels on the keyboard are always in capitals and the thing being described is a KEY SEQUENCE not the actual character code that the program sees. Yes this is confusing sometimes. –  Caleb Jul 9 '11 at 16:32
    
@Caleb: Thanks! How shall one specify that the key is in capital? Or is there ever such case? –  Tim Jul 9 '11 at 16:37
    
@Tim On a terminal, the key combinations Ctrl+Shift+D and Ctrl+D send the same character anyway (character number 4, usually called Ctrl+D). –  Gilles Jul 9 '11 at 16:41
    
@Tim: When specifying a key sequence to be entered by the user you would customarily include Shift in the sequence description as in Gilles' example above. –  Caleb Jul 9 '11 at 17:35

Your second point lumps to completely different things together.

  • Ctrl+C sends a kill signal to the running process.
  • Ctrl+D sends an End of Transmission character.

You are looking for the latter.

share|improve this answer
3  
Potential for confusion here: from the application perspective, no any actual character is sent for ^D. Which means that the application doesn't recieve that character from the read(2) syscall. –  ulidtko Jan 22 '13 at 17:59

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.