| | 290 | ===== stdout.c ===== |
| | 291 | |
| | 292 | {{{ |
| | 293 | #!c |
| | 294 | /* |
| | 295 | scrive st stdout(1) gli argomenti ricevuti sulla riga di comando |
| | 296 | |
| | 297 | utile per capire come funzionano quoting, escaping e command substitution nella shell: |
| | 298 | e.s. ./stdout "ciao ciao" |
| | 299 | ./stdout ciao ciao |
| | 300 | a="giallo"; b="rosso" ; ./stdout "$a $b" |
| | 301 | ./stdout $(ls /etc) |
| | 302 | |
| | 303 | compilare con: cc -o stdout stdout.c |
| | 304 | |
| | 305 | */ |
| | 306 | |
| | 307 | #include <stdio.h> |
| | 308 | |
| | 309 | int main(int argc, char **argv) { |
| | 310 | int i; |
| | 311 | |
| | 312 | for (i = 0; i < argc; i++) { |
| | 313 | printf("%d: %s\n", i, argv[i]); |
| | 314 | } |
| | 315 | |
| | 316 | return 0; |
| | 317 | } |
| | 318 | }}} |
| | 319 | |
| | 320 | ==== stdouterr.c ==== |
| | 321 | |
| | 322 | {{{ |
| | 323 | #!c |
| | 324 | |
| | 325 | /* |
| | 326 | scrive su stdout(1) e stderr (2) gli argomenti ricevuti sulla riga di |
| | 327 | comando; l'i-esimo argomento viene scritto su stdout se i e' pari e su |
| | 328 | stderr se i e' dispari |
| | 329 | |
| | 330 | utile per capire come funzionano redirezione e pipe nella shell |
| | 331 | e.s. ./stdouterr "primo argomento" "secondo argomento" | cat |
| | 332 | ./stdouterr "primo argomento" "secondo argomento" 2> /tmp/2 |
| | 333 | ./stdouterr "primo" "secondo" 2> /dev/null |
| | 334 | |
| | 335 | per compilare: cc -o stdouterr stdouterr.c |
| | 336 | */ |
| | 337 | |
| | 338 | #include <stdio.h> |
| | 339 | #include <string.h> |
| | 340 | |
| | 341 | int main(int argc, char **argv) { |
| | 342 | int i; |
| | 343 | char buf[2048]; |
| | 344 | |
| | 345 | for (i = 0; i < argc; i++) { |
| | 346 | snprintf(buf, 2047, "%d: %s\n", i, argv[i]); |
| | 347 | write(i % 2 + 1, buf, strlen(buf)); |
| | 348 | } |
| | 349 | |
| | 350 | return 0; |
| | 351 | } |
| | 352 | |
| | 353 | }}} |
| | 354 | |
| | 355 | |